E D R , A S I H C RSS

Full text search for "클래스 멤버 함수 포인터"

클래스 멤버 함수 포인터


Search BackLinks only
Display context of search results
Case-sensitive searching
  • MoreEffectiveC++/Miscellany . . . . 324 matches
         ''program in future tense''는, 변화의 수용하고, 준비한다. 라이브러에 추가될 새로운 함수, 앞으로 일어날 새로운 오버로딩(overloading)을 알고, 잠재적으로 모호성을 가진 함수들의 결과를 예측한다. 새로운 클래스가 상속 계층에 추가될 것을 알고, 이러한 가능성에 대하여 준비한다. 새로운 어플리케이션에서 코드가 쓰이고, 그래서 새로운 목적으로 함수가 호출되고, 그런 함수들이 정확히 동작을 유지한다. 프로그래머들이 유지 보수를 할때, 일반적으로 원래의 개발자의 영역이 아닌, 유지 보수의 몫을 안다. 그러므로, 다른 사람에 의해서 소프트웨어는 이해, 수정, 발전의 관점에서 구현하고 디자인된다.
         이런 좋은 소프트웨어를 만들기 위한 방법으로, 주석이나, 기타 다른 문서 대신에 C++ 내부에 디자인으로 구속해 버리는 것이다. 예를들자면 '''만약 클래스가 결코 다른 클래스로 유도되지를 원치 않을때''', 단시 주석을 헤더 파일에 넣는 것이 아니라, 유도를 방지하기 위하여 C++의 문법을 이용한 기술로 구속 시킨다.;이에 대한 방법은 '''Item 26'''에 언급되었다. 만약 클래스가 '''모든 인스턴스를 Heap영역에 생성시키고자 할때''', 클라이언트에게 말(문서)로 전달하는 것이 아니라. '''Item 27'''과 같은 접근으로 제한 시켜 버릴 수 있다. 만약 클래스에 대하여 복사와 할당을 막을려고 할때는, 복사 생성자와 할당(assignment) 연산자를 사역(private)으로 만들어 버려라. C++은 훌륭한 힘과, 유연성, 표현성을 제공한다. 이러한 언어의 특징들을 당신의 프로그래밍에서 디자인의 정책을 위해서 사용하라.
         "변화한다.", 험난한 소프트웨어의 발전에 잘 견디는 클래스를 작성하라. (원문:Given that things will change, writeclasses that can withstand the rough-and-tumble world of software evolution.) "demand-paged"의 가상 함수를 피하라. 다른 이가 만들어 놓지 않으면, 너도 만들 방법이 없는 그런 경우를 피하라.(모호, 원문:Avoid "demand-paged" virtual functions, whereby you make no functions virtual unless somebody comes along and demands that you do it) 대신에 함수의 ''meaning''을 결정하고, 유도된 클래스에서 새롭게 정의할 것인지 판단하라. 그렇게 되면, 가상(virtual)으로 선언해라, 어떤 이라도 재정의 못할지라도 말이다. 그렇지 않다면, 비가상(nonvirtual)으로 선언해라, 그리고 차후에 그것을 바꾸어라 왜냐하면 그것은 다른사람을 편하게 하기 때문이다.;전체 클래스의 목적에서 변화를 유지하는지 확신을 해라.
         모든 클래스에서 할당(assignment), 복사를 잡아라. "비록 아무것도 하지 않는 것"이라도 말이다. 왜냐하면 그것들이 지금 할수 없는건 미래에도 할수 없다는 의미이다. 만약 이러한 함수들이 구현하기에 어렵게 한다면, 그것을 private로 선언하라. 미래에도 동작시키게 하지 않다는 의미다. 컴파얼러가 만들어내는 함수에 대한 모호한 호출을 할리가 없다. (기본 할당 생성자나 기본 복사 생성자가 종종 발생되는 것처럼)
         원리를 구현하기 위해 특이하게 하지 마라.:연산자와 함수를 자연스럽고 명시적인 문법으로 제공하라. built-in(기본 자료) 형으로 구현하라:의심될때는 int로 하라
         어떤이가 무언가를 '''할수있다는것''' 알게되면 그들을 그것을 '''할것이다.''' 그들은 예외를 던질 것이다. 그들은 그들 스스로에게 객체를 할당할 것이다. 그들은 값을 제공하기전에 객체를 사용할 것이다. 그들은 객체를 제공하겠지만, 결코 사용하지 않는다. 그들은 커다란 값을 제공할 것이다. 그들은 아주 작은 값을 제공할 것이다. 그들은 null 값을 제공할 것이다. '''일반적으로 만약 컴파일이 되면 어떤이가 그것을 할것이다.''' 결과적으로 당신의 클래스를 정확히 사용하는건 쉽게, 이상하게 사용하는건 어렵게 만들어라. 클라이언트가 실수를 하도록 해라 그리고 당신의 클래스들이 그러한 에러들을 방지하고, 찾고, 수정할수 있게 만들어라. (예를들어 Item 33 참고)
         당신의 코드를 변화가 필요할때, 그 효과를 지역화(지역화:localized) 시키도록 디자인 해라. 가능한한 캡슐화 하여라:구체적인 구현은 private 하라. 광범위하게 적용해야 할곳이 있다면 이름없는(unamed) namespace나, file-static객체 나 함수(Item 31참고)를 사용하라. 가상 기초 클래스가 주도하는 디자인은 피하라. 왜냐하면 그러한 클래스는 그들로 부터 유도된 모든 클래스가 초기화 해야만 한다. - 그들이 직접적으로 유도되지 않은 경우도(Item 4참고) if-than-else을 개단식으로 사용한 RTTI 기반의 디자인을 피하라.(Item 31참고) 항상 클래스의 계층은 변화한다. 각 코드들은 업데이트 되어야만 한다. 그리고 만약 하나를 읽어 버린다면, 당신의 컴파일러로 부터 아무런 warning를 받을수 없을 것이다.
         여기에서 B는 D의 기초 클래스이다. 다른 말로 하자면 이 작성자는 만약 다음과 같은 경우에 B는 가상 파괴자(virtual destroctor)가 필요 없어 보인다.
         그 의미는 클라이언트 코드에 대하여 약간의 변화가 -delete문-결과적으로 클래스 B의 정의까지 변화해야 하는 필요성을 보여준다. 그런한 상황이 발생하면, B의 클라이언트들은 모두 재 컴파일 해야 한다. 아까, 이 필자의 충고를 따르면, 확장 코드에 대한 클라이언트의 라이브러리도 재 컴파일, 재 연결해야 한다. 이는 소프트웨어 디자인에 효과를 미틴다.
          * 만약 public base class가 가상 파괴자를 가지고 있지 않다면, 유도된 클래스나, 유도된 클래스멤버들이 파괴자를 가지고 있지 않다.
         그렇지만 새로운 클래스가 B로부터 유도되면 바뀌어야 한다.
          * 만약 다중 상속 상태에서 어떠한 파괴자가 있다면, 모든 기본 클래스가 아마 가상 파괴자(virtual destructor)가 되어야 할것이다.
         이렇게 반복에서 말하는거 같이 현재의 시류를 생각하는걸 주시하라. 클라이언트가 '''지금''' 늘어나고 있는 의견들에 대하여 어떻게 해야 하는가? 어떤 클래스 멤버가 '''지금''' 파괴자를 가지고 있는가? 계층상에 어떤 클래크가 '''지금''' 파괴자를 가지는가?
         미래의 시류로 생각하는 관점은 완전히 다르다. 지금 어떻게 클래스를 사용하느냐를 묻는것 대신에, '''어떻게 클래스를 디자인 하느냐를 묻는다.''' 미래 지향적 생각으로는 이렇게 말한다. 만약 기초 클래스로 사용된 클래스가 '''디자인''' 된다면 그 클래스는 가상 파괴자를 가져야 한다. 그러한 클래스는 지금과 미래 모두 정확히 동작해야 한다. 그리고 그들오 부터 클래스들이 파생될때 다른 라이브러리의 클래스에게 영향을 끼쳐서는 안된다. ( 최소한, 파괴자로 인한 논란 만큼, 영향이 없어야 한다. 추가적인 변화가 클래스에 필요하면 다른 클라이언트들오 아마 영향을 받을 것이다.)
         상업용 클래스 라이브러리(C++표준 라이브러리 상의 string 스펙의 날짜를 앞당기려는 회사)는 가상 파괴자를 가지고 있지 않은 sting클래스를 포함한다. 그 벤더의 설명은?
         확실히 vtbl 문제는 합법적인 접근이다. (Item 24참고) 대다수 String클래스의 구현에서 오직 하나의 char*를 각각의 String 객체가 가지고 있다. 그래서 각 String객체에 추가되는 vptr도 두배의 양을 차지한다. 허용하지 않으려는 이유는 이해하기 쉽다. String같은 클래스를 무겁게 사용하면 눈에 띠는 성능 저하가 있다. 앞서 언급한 경우 클래스당 성능 저하는 약 20%정도를 가지고 온다. (Item 16참고)
         어떤 것이 더 많은 문제를 일으키는 것으로, 밴더들의 주목을 받고 있을까? "우리는 String*을 사용하는 목적을 가지지 않는다. 그래서 이는 별 문제가 되지 않는다." 그건 아마 사실일 것이다. 하지만 그들의 String클래스는 수많은 개발자들이 사용가능한 것이다. 수많은 개발자들이 C++의 수준이 제각각이다. 이러한 개발자들이 String상에서의 비가상 파괴자(no virtual destructor)를 이해할까? 그들이 비가상 파괴자를 가진 String때문에 String으로 유도된 새로운 클래스가 모험 비슷한 것을 알고 있을까? 이런 벤더들은 그들의 클라이언트들이 가상 파괴자가 없는 상태에서 String*를 통하여 삭제가 올바르게 작동하지 않고, RTTI와 String에 대한 참조가 아마 부정확한 정보를 반환한다는걸 확신시킬까? 이 클래스가 정확히 쓰기 쉬운 클래스일까? 부정확하게 쓰기 어려운 클래스일까?
         이 벤더는 물론 String클래스에 관한 유도해서는 안되도록 디자인 된 문서들을 제공할 것이다. 하지만, 프로그래머들이 문서를 보는 도중에 그 부분을 놓쳤다면 어떻게 하겠는가?
         ... // 이제 해당 객체는 포인터처럼 다룬다. 하지만 delete를 부르지 말아야 한다.
         하지만 정확하지 않게 동작하는 유도된 클래스의 사용을 억제하는 것은 문법적으로 상당히 불편함을 낳는다. (String에서 이런 문법적으로 불편한 면이 그리 강조되지 않다. 그렇지만 다른 클래스에서 이러한 문법적인 불편함을 따지는 면이 중요하다.)
  • EffectiveC++ . . . . 242 matches
         1. 상수 포인터(constant pointer)를 정의하기가 다소 까다로워 진다는 것.
         2. 상수의 영역을 클래스로 제한하기 위해선 상수를 멤버로 만들어야 하며
          멤버 변수를 만들어야 한다.
          * inline: 함수 호출로 인한 오버헤드를 줄일수 있는.. 거시기. 궁금하면 책찾아보세요.
          매크로는 말 그대로 치환이기 때문에 버그 발생할 확률이 높음. 상수선언이나 함수선언같은 경우는 가급적 const 나 inline으로 대체하는게 좋겠지. (으.. 그래도 실제로 짤때는 상수 선언할때는 #define 남용 경향이..[[BR]]
         동적 메모리 할당을 행하는 클래스들은 메모리를 할당하기 위해서 생성자에 new를 쓴다. (CString class같은것들?)[[BR]]
         그러나, 나중에 이렇게 만든 클래스를 누군가가 개선될경우 그리고, 개선된 클래스에서 포인터 멤버를 추가하게[[BR]]
          * ''Initialization of the pointer in each of the constructors. If no memory is to be allocated to the pointer in a particular constructor, the pointer should be initialized to 0 (i.e., the null pointer). - 생성자 각각에서 포인터 초기화''
          * ''Deletion of the existing memory and assignment of new memory in the assignment operator. - 포인터 멤버에 다시 메모리를 할당할 경우 기존의 메모리 해제와 새로운 메모리의 할당''
          * ''Deletion of the pointer in the destructor. - 소멸자에서 포인터 삭제''
         세번째 '''소멸자에서 포인터 삭제'''에 관한 것을 제대로 안해주면 메모리 유출(memory leak)으로 그냥 처리되기 때문에 클래스포인터 멤버를 추가할 때마다 반드시 명심해야 한다.
         typedef void (* new_handler) {}; // 함수 pointer
         // 연산자 new가 충분한 메모리를 할당하지 못할 경우 호출될 함수
         ''- 할당 루틴들이 new 핸들러 함수(memory 할당시 예외 처리같은 거들) 를 지원하고 [[BR]]
         - 할당해제 루틴들이 널 포인터에 대처할 수 있다.[[BR]]''
         멤버가 아닌 operator new
         operator new 가 하부 클래스로 상속된다면 어떻게 될까? [[BR]]
         그런데, 이 클래스를 위해 만들어진 operator new 연산자가 상속될 경우. [[BR]]
         상속받은 클래스내에 operator new연산자를 다시 재정의 해줘야 한다. [[BR]]
         멤버가 아닌 operator delete
  • MoreEffectiveC++/Techniques1of3 . . . . 240 matches
          * Item 25: 생성자와 비멤버 함수를 가상으로 돌아가게 하기.
         가상 생성자, 이것에 관해서 생각해 보기는 좀 생소하다. 사실 가상 함수를 부를려면, 객체에대한 참조나, 포인터를 가지고 있어야 하는데, 생성할때 부터 가상(virtual) 함수를 사용한다? 좀 이상하지 않은가? 어떨때, 어떻게 이 '''가상 생성자''' 라는걸 써먹을수 있을꺼?
         list 클래스는 STL로 이루어져 있는데, Item 35를 참고하면 정보를 얻을수 있다. 단순히 이중 연결 리스크(double linked list)라고 생각하면 무리가 없을 것이다.
         readComponent가 무엇을 어떻게 하는지 궁리해 보자. 위에 언급한듯이 readComponent는 리스트에 넣을 TextBlock나 Graphic형의 객체를 디스크에서 읽어 드린 자료를 바탕으로 만들어 낸다. 그리고 최종적으로 만들어진 해당 객체의 포인터를 반환해서 list의 인자를 구성하게 해야 할것이다. 이때 마지막 코드에서 가상 생성자의 개념이 만들어 져야 할것이다. 입력되 는자료에 기초되어서, 알아서 만들어 인자. 개념상으로는 옳지만 실제로는 그렇게 구현될수는 없을 것이다. 객체를 생성할때 부터 형을 알고 있어야 하는건 자명하니까. 그렇다면 비슷하게 구현해 본다?
         가상 생성자의 방식의 한 종류로 특별하게 가상 복자 생성자(virtual copy constructor)는 널리 쓰인다. 이 가상 복사 생성자는 새로운 사본의 포인터를 반환하는데 copySlef나 cloneSelf같은 복사의 개념으로 생성자를 구현하는 것이다. 다음 코드에서는 clone의 이름을 쓰였다.
         보다시피 클래스의 가상 복사 생성자는 실제 복사 생성자를 호출한다. 그러므로 "복사" 의미로는 일반 복사 생성자와 수행 기능이 같다 하지만 다른 점은 만들어진 객체마다 제각각의 알맞는 복사 생성자를 만든다는 점이 다르다. 이런 clone이 NewsLetter 복사 생성자를 만들때 NLComponent들을 복사하는데 기여를 한다. 어떻게 더 쉬운 작업이 되는지 다음 예제를 보면 이해 할수 있을 것이다.
          === Making Non-Member Functions Act Virtual : 비멤버 함수를 가상 함수처럼 동작하게 하기 ===
         생성자는 실제로 가상 함수가 될수 없다. 마찬가지로 비멤버 함수들 역시 마찬가지 이리라, 하지만 그러한 기능이 필요할 떄가 있다. 바로 앞 예제에서 NLComponent와 그것에서 유도된 클래스들을 예를 들어 보자면 이들을 operator<<으로 출력을 필요로 할때 이리라. 뭐 다음과 같이 하면 문제 없다.
          // operator<<의 가상 함수
         하지만 출력해야할 스트림 객체가 righ-hand 객체라는것이 사용자 입장에서 불편하게 만든다. 우리가 보통 사용하는 것처럼 스트림 객체에 출력할 객체를 넣는 다는 개념이 적용되지 않는 것이리라. 하지만, 전역 함수나 friend함수를 이용해서 구현한다면 더이상 가상함수로 구현할수가 없게 된다. 여기서의 방법이 비멤버 함수를 이용하는 것이다.
         다음과 같이 가상 함수로 출력을 구현하고, 전역이든, namespace로 묶여 있든, 비 멤버 함수로 스트림 객체와의 출력의 고리를 연결시켜서, 비멤버 함수가 가상함수처럼 돌아가도록 구현한다.
         가상 함수의 역할을 비멤버(non-member)함수로 구현한 사례이다. 비 멤버 함수이지만 inline을 통해서 가상 함수와의 직접 연결 통로를 만들었다.
         비멤버 함수의 가상(virtual)관련 사용에 대하여 더 다루자면 내용이 복잡해 진다. 이에 대한 관련 사항은 Item 31을 참고하라
          friend Printer& thePrinter(); // 이 friend 함수가 유일한 객체 하나를 유지 시키고
         해당 디자인은 세가지의 중점으로 이해 하면 된다. '''첫번째''' Printer클래스의 생성자를 private(사역)인자로 설정한다. 이는 객체 생성을 제한한다. '''두번째''' 전역 함수인 thePrinter를 Printer클래스의 friend로 선언한다. 그래서 이 thePrinter가 첫번째에서의 제한에 상관없이 관여 가능하도록 만든다. '''마지막으로(세번째)''' 전역함수인 thePrinter 내부에 정적(static) Printer 객체를 만든다. 이는 오직 하나만의 객체를 thePrinter내부에 유지시킨다.
         하지만 이렇게 구현시에는 thePrinter가 "'''전역 공간을 사용해야 한다.'''" 것으로 코드를 약하게 만든다. 알다 시피, 전역 공간의 사용은 되도록이면 피해야 하는 방법이며, thePrinter를 Printer클래스 내부에 숨기기를 추천하다. thePrinter를 Printer클래스 내부 메소드로 넣어 버리고, friend를 삭제해 보자.
          class Printer { // namespace로서 이 클래스
          Printer& thePrinter() // 이 friend 함수 역시 전역이 아닌
         '''첫번째'''로 만들어지는 객체의 위치이다. 위의 제시된 두가지의 방법에서, Printer 정적(staitc) 객체가 하나는 friend로 클래스의 제어권을 획득한 함수 내부에 있고, 또 하나는 클래스 멤버 메소드 내부에 있다. 함수에 있는 경우에는 정적(static) 객체는 항상 만들어져 있다. 이 의미는 해당 코드의 프로그램이 시작될때 부터 아예 객체가 만들어 진다는 의미이다. 즉, 한번도 그 객체를 사용하지 않아도, 객체는 이미 만들어져 비용을 지출하게 한다. 반면에, 함수 멤버 메소드 내부에 정적(static)객체를 만들 후자의 경우에는 객체를 만드는 역할을 하는 메소드인 Printer::thePrinter 가 제일 처음 호출될때 객체가 생성된다. 이것은 C++에서 "사용하지 않는 객체에 대한 비용은 지불하지 않는다."의 설계 다소 복잡한 이념에 근간을 둔 개념이다. 그리고 이러한 복잡한 개념은 당신을 해깔리게 만든다.
         또 이 둘의 다른 취약점은 초기화 되는 시간이다. 우리는 함수의 경우에 초기화 시간을 정확히 알수 있다. 아예 처음 이니까 하지만 멤버 메소드로 구현시에는 모호하다. C++는 확실히 특별하게 해석해야 할 부분(단일 객체에서 소스 코드 몸체 부분 따위)은 정적 인자들에 대한 초기화 순서가 보장 된다. 하지만 서로 다른 해석 부분(translation unit)에 있는 정적 객체들의 초기화 순서에 대해서는 말할수가 없다. 이것은 머리를 아프게만 할뿐이다.
  • C/C++어려운선언문해석하기 . . . . 176 matches
         다루겠습니다. 우리가 매일 흔히 볼 수 있는 선언문을 비롯해서 간간히 문제의 소지를 일으킬 수 있는 const 수정자와 typedef 및 함수
         포인터를 다룬 후 마지막으로 "오른쪽에서 왼쪽으로" 규칙을 알아 봅니다.
         포인터로 넘어가서 다음과 같은 선언문을 보게되면,
         '변수 p를 int *형으로 선언한다' 라고 해석할 수 있고 다시 말하면 '변수 p를 int형을 가리키는 포인터로 선언한다'라고 할 수 있습니
         다. 여기서 잠깐 샛길로 빠져서 포인터 연산자(*) 또는 참조 연산자(&)는 변수 형 (int)에 붙이는 것 보다 변수(p)에 붙이는것이 항상
         위의 선언문을 처음 보게 되면 변수 p와 변수 q가 마치 int를 가리키는 포인터형 (int *) 변수로 선언된 것 처럼 보입니다. 하지만 사실
         변수 p만 int를 가리키는 포인터형으로 선언되었고 변수q는 int형으로 선언된 것입니다. (역자주: int *p; int *q; 처럼 각각 따로 선언
         우리는 또한 포인터를 가리키는 포인터를 선언할 수 있습니다.
         원리만 따지자면 이 관계는 무한히 반복될 수 있습니다. 따라서 우리는 float형을 가리키는 포인터를 가리키는 포인터를 가리키는 포인
         변수 p는 int형을 요소로 하는 크기가 4인 배열을 가리키는 포인터(a pointer to an array of 4 ints)이며, 변수 q는 int형 포인터를 요
         const가 포인터와 결합되면 조금 복잡해집니다. 예를 들어서 다음과 같은 변수 p, q가 선언되었습니다.
         그럼 여기서 퀴즈, const int형을 가리키는 포인터와 int형을 가리키는 const 포인터를 구별해보세요.
         사실 두 변수 모두 const int를 가리키는 포인터입니다. int 형을 가리키는 const 포인터는 다음과 같이 선언됩니다.
         위에서 p와 q는 const int형 변수이기 때문에 *p 나 *q의 값을 변경할 수 없습니다. r은 const 포인터이기 때문에 일단 위와 같이 선언
         위에서 나온 두 가지 선언문을 결합하여 const int 형을 가리키는 const 포인터를 선언하려고 하면 다음과 같습니다.
         변수 p, q 모두 char를 가리키는 포인터 변수가 됩니다. typedef가 사용되지 않았다면 q는 char를 가리키는 포인터 변수가 아니라 char 형 변수였을 텐데 솔직히 이런 사실을 모르는 경우 실수하기 쉽상이죠.
         // char형을 가리키는 포인터
         // char형을 가리키는 포인터를 리턴하는
         // 함수
         // char형을 가리키는 포인터을 리턴하는
  • MoreEffectiveC++/Techniques2of3 . . . . 158 matches
         a~e까지 모두 "Hello"라는 같은 값을 가지고 있는 다른 객체이다. 이 클래스는 참조 세기가 적용되지 않았기 때문에 모두 각각의 값을 가지고 있다. 문자열의 할당(assignment) 연산자는 아마 다음과 같이 구현되어 있을 것이다.
         참조 세기를 하는 String 클래스를 만드는건 어렵지는 않지만, 세세한 부분에 주목해서 어떻게 그러한 클래스가 구현되는지 주목해 보자. 일단, 자료를 저장하는 저장소가 있고, 참조를 셀수 있는 카운터가 있어야 하는데, 이 둘을 하나로 묶어서 StringValue 구조체로 잡는다. 구조체는 String의 사역(private)에 위치한다.[[BR]]
          char *data; // 값 포인터
         다음과 같다. 여기에서 "More Effective C++" 라는 문자열을 공유한다면, 참조세기가 이루어 지는 것일 거다. 그러기 위해서 String의 복사 생성자는, 참조 카운터를 올리고, 자료를 새로 생성할것이 아니라, 그냥 포인터만 세팅해 주는 일을 해야 한다. 이런 과정을 구현하면
         // String 클래스의 복사 생성자, 초기화 목록으로 StringValue의 포인터를 세팅한다.
         여기서의 요점은 참조세기가 적용되지 않은 String 클래스보다 더 효율이 높아 진다는 점이다. 이 책 전반에 계속 언급했듯이, 생성과 파괴 같은 시간과, 공간의 많은 비용을 소모하는 식이 아닌, 해당 포인터만을 복사하므로, 일단, 생성시의 비용을 아낀다.
         참조세기가 적용된 문자열에 대하여 둘러 봤는데, 이번에는 배열에 관한(array-bracket) 연산자들 "[]" 이녀석들에 관해서 생각해 보자. 클래스의 선언은 다음과 같다.
         (이 함수는 원래의 C++에서 배열의 사용 개념과 같이, index의 유효성을 점검하지 않는다. 이에 대한 감은은 참조 세기의 주제에 떨어져 있고, 추가하는 것도 그리 어려운일이 아니라 일단은 제외한다.)
          === Pointers, References, and Copy-on-Write : 포인터, 참조, 쓰기에 기반한 복사 ===
         이런것을 해결할수 있는 방법으로는 최소한 세가지를 생각할수 있는데, '''첫번째'''는 이것을 없는걸로 취급하고, 무시 해 버리는 것이다. 이러한 접근 방향은 참조 세기가 적용되어 있는 클래스 라이브러리에 상당한 괴로움을 덜어 주는것이다. 하지만 이러한 문제를 구현상에서 완전히 무시할수는 없는 노릇이다. '''두번째'''로 생각할수 있는 방법은 이러한것을 하지 말도록 명시하는 것인데, 역시나 복잡하다. '''세번째'''로, 뭐 결국 제거야만 할것이다. 이러한 분제의 제거는 그리 어렵지는 않다. 문제는 효율이다. 이런 중복에 관련한 문제를 제거하기 위해서는, 새로운 자료 구조를 만들어 내야하고, 이것의 의미는 객체간에 서로 공유하는 자료가 줄어 든다는 의미이다. 즉, 비용이 많이 들어간다. 하지만 어쩔수 없지 않을까?
         만약 Item 30에 언급되는 proxy 클래스 방법을 사용해서 읽는 작업과, 쓰는 작업에 대한 것을 구분한다면 StringValue 객체의 숫자를 좀더 줄일수 있을 것이다. 그건 다음 장에서 보자.
          === A Reference-Counting Base Class : 참조-세기 기초 클래스 ===
         제일 처음에 해야 할일은 참조세기가 적용된 객체를 위한 (reference-counded object) RCObject같은 기초 클래스를 만드는 것이다. 어떠한 클라스라도 이 클래스를 상속받으면 자동적으로 참조세기의 기능이 구현되는 형식을 바라는 것이다. 그러기 위해서는 RCObject가 가지고 있어야 하는 능력은 카운터에 대한 증감에 대한 능력일 것이다. 게다가 더 이상, 사용이 필요 없는 시점에서는 파괴되어야 한것이다. 다시말해, 파괴되는 시점은 카운터의 인자가 0이 될때이다. 그리고 공유 허용 플래그에 대한(shareable flag) 관한 것은, 현재가 공유 가능한 상태인지 검증하는 메소드와, 공유를 묶어 버리는 메소드, 이렇게만 있으면 될것이다. 공유를 푼다는 것은 지금까지의 생각으로는 불가능한 것이기 때문이다.
         RCObject는 생성되고, 파괴되어 질수 있어야 한다. 새로운 참조가 추가되면 현재의 참조는 제거되어야 한다. 공유 상태에 대해 여부를 알수 있어야 하며, disable로 설정할수 있어야 한다. 파괴자에 대한 실수를 방지하기 위하여 베이스 클래스는 파괴자를 가상 함수로선언해야 된다. 여기에서는 순수 가상 함수(pure virtual function)로 선언한다.
         RCObject::~RCObject() {} // 파괴자는 그것이 순수 가상 함수라도
         의문 하나, 흥미롭게도 처음에 refCount를 0으로 세팅한다. 이건 직관적이지 못하게 보이는데, 확실히 새로 만들어지는 RCObject의 생성자는 새로 만들어진 RCObject를 참조하고 있을 것이기 때문이다. 하지만 이러한 이유는, 새로운 객체가 할당된 뒤에 유도된 클래스 스스로, refCount를 증가 시켜주기위해서 이다. 이것이 사용자에게 더 명시적인 코드를 작성하게 된다.
         의문 셋, 할당(assignment) 연산자는 아까 공유 문제를 뒤집어 버리는 것 처럼 보인다. 하지만 이 객체는 기초 클래스이다. 어떤 상황에서 이를 유도하는 다른 클래스가 공유 flag를 비활성화 시키는지 확신 할수 없기 때문에, 일단 아무것도 하지 않고, 현재의 객체를 반환하게 해 두었다.
         자, RCObject는 기초 클래스이며, 차후 데이터를 저장하는 공간은 RCObject의 자식에게서 구현되어 진다. 그래서 opreator=은 유도 된 클래스에서 원할때 이 참조 객체를 바꾸기 위하여, RCObject::operator= 형식으로 불러야 한다. 이하, 거의다 소스 자체를 이해해야 한다. 해당 RCObject를 이용해서 유도된 클래스의 모양은 다음과 같으며, 모든 코드는 구현하지 않겠지만, 지금까지의 개념으로 이해할수 있을 것이다.
         이 StringValue버전은 이전에 보던것과 거의 동일한 형태를 보인다.단, refCount를 다루는 것만이 RCObject의 멤버 함수로서 모든 기능을 후행하는 것이다. 이 것의 더 구체적인 코드는 다음 장에서 보이는 스마트 포인터를 이용한 자동 참조 카운팅 기능을 덧붙이면서 어차피 모든 코드를 서술할 것이다.
         이번 주제의 nested class의 모습을 보면 그리 좋와 보이지는 않을 것이다.처음에는 생소하겠지만, 이러한 방버은 정당한 것이다. nested클래스의 방법은 수많은 클래스의 종류중 단지 하나 뿐이다. 이것을 특별히 취급하지는 말아라.
  • 새싹교실/2012/startLine . . . . 150 matches
          * 입, 출력 함수(printf, scanf)와 테스트 함수(assert).
          * 왜 테스트 함수를 써야 하는가.
          * 정확하게 알지 못 하는 부분들(함수, call by value, call by reference, 구조체, 포인터)
          * 서민관 - 간단하게 재현이가 C문법 알고있는 부분 알아보기, 함수 만들어보기, 전체적인 계획 설명, gcc 사용법. 일단 제어문과 간단한 함수 문법까지도 알고 있는 것 같다. 어제 일도 있어서 긴장을 많이 했는데 그래도 생각보다 어렵지는 않았다. 앞으로는 좀 더 예제등을 준비해야겠다.
          * 서민관 - 제어문의 사용에 대한 수업(if문법, switch.. for...) 몇몇 제어문에서 주의해야 할 점들(switch에서의 break, 반복문의 종료조건등..) 그리고 중간중간에 쉬면서 환희가 약간 관심을 보인 부분들에 대해서 설명(윈도우 프로그래밍, python, 다른 c함수들) 저번에 생각보다 진행이 매끄럽지 않아서 이번에도 진행에 대한 걱정을 했는데 1:1이라 그런지 비교적 진행이 편했다. 그리고 환희가 생각보다 다양한 부분에 관심을 가지고 질문을 하는 것 같아서 보기 좋았다. 새내기들이 C를 배우기가 꽤 힘들지 않을까 했는데 의외로 if문이나 for문에서 문법의 이해가 빠른 것 같아서 좀 놀랐다. printf, scanf나 기타 헷갈리기 쉬운 c의 기본문법을 잘 알고 있어서 간단한 실습을 하기에 편했다.
          * 함수의 역할과 인자/리턴 타입에 따른 함수의 종류.
          * 함수의 사용.
          * swap 함수를 통해서 알아본 현재 시점에서 함수의 문제.
          * 간단한 이전 시간(if문, 반복문)의 복습과 배열의 사용에 대해 알아보았다. 그리고 이번 시간에 주로 한 내용은 함수가 왜 필요한지와 함수를 만드는 법, 함수를 사용하는 법 등이었다. 개인적으로는 함수를 꽤 중요하게 생각하는 만큼 함수의 필요성을 잘 캐치해 줬으면 좋겠다. 그리고 새삼 드는 생각이지만 환희의 질문이 중요한 부분을 잘 찌른다는 생각이 든다. 별다른 언급도 없었는데 함수 내에서 변수의 scope나 함수 내부의 이름 겹침 등에 대한 질문이 있었다. 그리고 중간에 함수 사용의 예제로 printf문을 약간 이상하게 쓴 코드를 보여줬는데 의외로 감을 잘 잡은 것 같았다. 현재 진행상황으로는 다음에 포인터를 다뤄야 할텐데 함수를 쓰는 것을 조금 더 연습을 시킬지 바로 포인터를 나갈지 고민이다. 당장 포인터를 했다가 어려워하지 않을까 모르겠다. - [서민관]
          - 함수란? 함수의 정의, 만드는 예제
          * 재현, 성훈이의 함수에 대한 지식 확인.
          * swap 함수를 만들어보고 문제점 확인.
          * 포인터의 개념, 프로그램 실행시 메모리의 구조.
          * malloc 함수를 이용한 메모리 할당.
          * 배열과 포인터의 관계.
          * 처음에 간단하게 재현, 성훈이의 함수에 대한 지식을 확인했다. 그 후에 swap 함수를 만들어 보고 실행시의 문제점에 대해서 이야기를 했다. 함수가 실제로 인자를 그대로 전달하지 않고 값을 복사한다는 것을 이야기 한 후에 포인터에 대한 이야기로 들어갔다. 개인적으로 새싹을 시작하기 전에 가장 고민했던 부분이 포인터를 어떤 타이밍에 넣는가였는데, 아무래도 call-by-value의 문제점에 대해서 이야기를 하면서 포인터를 꺼내는 것이 가장 효과적이지 않을까 싶다. 그 후에는 주로 그림을 통해서 프로그램 실행시 메모리 구조가 어떻게 되는지에 대해서 설명을 하고 포인터 변수를 통해 주소값을 넘기는 방법(call-by-reference)을 이야기했다. 그리고 malloc을 이용해서 메모리를 할당하는 것과 배열과 포인터의 관계에 대해서도 다루었다. 개인적인 느낌으로는 재현이는 약간 표현이 소극적인 것 같아서 정확히 어느 정도 내용을 이해했는지 알기가 어려운 느낌이 있다. 최대한 메모리 구조를 그림으로 알기 쉽게 표현했다고 생각하는데, 그래도 정확한 이해도를 알기 위해서는 연습문제 등이 필요하지 않을까 싶다. 성훈이는 C언어 자체 외에도 이런저런 부분에서 질문이 많았는데 아무래도 C언어 아래 부분쪽에 흥미가 좀 있는 것 같다. 그리고 아무래도 예제를 좀 더 구해야 하지 않을까 하는 생각이 든다. - [서민관]
          * 포인터의 기초와 포인터를 이용한 swap 함수 구현, 값 변환. 그리고 malloc의 형태 기초와 좀 더 쉽게 쓰는 법 익힘. 다음엔 malloc을 이용한 응용프로그램 구현을 해보고 싶다. - [최재현]
          * 포인터의 정의, 포인터 변수의 정의, malloc 함수, fflush() 함수, getchar() 함수, 메모리의 heap과 stack 영역, (int)a와 *(*(int a))의 차이, 포인터의 OS별 크기(DWORD 크기를 따라간다. 32bit/64bit),
          해봐야 할 것 - 디버깅, 가변인자함수 조사, 복습. - [이성훈]
          * swap 함수에 대해서 복습.
  • MoreEffectiveC++/Efficiency . . . . 125 matches
         대부분 프로그래머들은 그들의 프로그램에 관한 특성에 관하여 멍청한 직관력을 가지고 있다. 왜냐하면 프로그램 성능의 특징은 아주 직관적이지 못하다. 결과적으로 남에 눈에는 띄지 않고 말할수 많은 노력이 성능 향상을 위해 프로그램의 관련된 부분에 쏟아 부어 진다. 예를들어서 아마, 계산을 최소화 시키는 알고리즘과 데이터 구조가 프로그램에 적용 되다. 그렇지만 만약에 입출(I/O-bound)력 부분 적용된다면 저것은 허사가 된다. 증가되는 I/O 라이브러리는 아마 컴파일러에 의하여 바뀐 그 코드에 의해 교체될것이다. 그렇지만, 프로그램이 CPU-bound에 대한 사용이라면 또 이건 별로 중요한 포인터(관점)이 되지 않는 것이다.
         프로파일러(profiler:분석자)는 각각의 구문이 몇번이나 실행되는가 아니면 각각의 함수들이 몇번이나 불리는거 정도를 알려주는 유틸리티이다. 성능(performance)관점에서 당신은 함수가 몇번 분리는가에 관해서는 그리 큰 관심을 두지 않을 것이다. 프로그램의 사용자 수를 세거나, 너무 많은 구문이 수행되어 불평을 받는 라이브러리를 사용하는 클라이언트의 수를 세거나, 혹은 너무 많은 함수들이 불리는 것을 세는 것은 다소 드문 일이기도 하다. 하지만 만약 당신의 소프트웨어가 충분이 빠르다면 아무도 실행되는 구문의 수에 관해 관여치 않는다. 그리고 만약 너무 느리면 반대겠지. (이후 문장이 너무 이상해서 생략, 바보 작성자)
         몇번이나 구문이 실행되는가, 함수가 실행되는가는 때때로 당신의 소프트웨어 안의 모습을 이야기 해준다. 예를들어 만약 당신이특별한 형태의 객체를 수백개를 만든다고 하면, 생성자의 횟수를 세는것도 충분히 값어치 있는 일일 것이다. 게다가 구문과, 함수가 불리는 숫자는 당신에게 직접적인 해결책은 제시 못하겠지만, 소프트웨어의 한면을 이해하는데 도움을 줄것이다. 예를들어서 만약 당신은 동적 메모리 사용을 해결하기 위한 방법을 찾지 못한다면 최소한 몇번의 메모리 할당과 해제 함수가 불리는것을 아게되는것은 유용한 도움을 줄지도 모른다. (e.g., operators new, new[], delete and delete[] - Item 8참고)
         이런 같은 관점을 이제 막 5년차 C++프로그래머에 대입 시켜본다. 컴퓨터 과학에서, 우리는 그러한 뒤로 미루기를 바로 ''''lazy evaluation''''(구지 해석하면 '''필요시 연산, (최)후 연산, 늦은 연산'''정도라 할수 있겠다.)이라고 말한다. 당신이 lazy evaluation을 사용하면 당신의 클래스들이 최종적으로 원하는 결과가 나올 시간까지 지연되는 그런 상태로 코딩을 해야 한다. 만약 결과값을 결국에는 요구하지 않는다면, 계산은 결코 수행되지 않아야 한다. 그리고 당신의 소프트웨어의 클라이언트들과 당신의 부모님은 더 현명하지 않아야 한다.( 무슨 소리냐 하면, 위의 방치우기 이야기 처럼 부모님이나 클라이언트들이 lazy evaluation기법의 일처리로 해결을 하지 않아도 작업에 대한 신경을 안써야 한다는 소리 )
          class String { ... }; // 문자열 클래스 (이건 밑의 언급과 같이 표준 스트링 타입과
         이와 같은 구문의 사용으로, String의 convertToUpperCase 함수를 적용하면, s2의 값의 복사본을 만들어야 하고, 수정되기전에 s2에 그걸 s2의 종속되는 데이터로 만들어야 한다. convertToUpperCase 내부에 우리는 lazy 상태가 더이상 지속되지 않도록 하는 코드를 넣어야 한다.:s2가 마음대로 다룰수 있도록 s2의 공유된 값의 사본을 복사해야 한다. 반면에 만약 s2가 결코 수정되지 않을 것이라면, 이러한 s2만의 값을 복사하는 일련의 과정이 필요 없을 것이다. 그리고 s2가 존재하는 만큼 값도 계속 존재해야 한다. 만약 더 좋게, s2가 앞으로 결코 변하지 않는다면, 우리는 결코 그것의 값에 대한 노력을 할필요가 없을 것이다.
         이것은 우리에게 적용 관점에서 상당히 난제이다. 우리가 원하는 것에 이르기 위하여 operator[] 안쪽에 각기 다른 작업을 하는 코드가 필요하다.(읽기와 쓰기에 따라서 따로 작동해야 한다.) 어떻게 우리는 operator[]가 읽기에 불리는지 쓰기에 불리는지 결정할수 있을까? 이런 잔인한 사실은 우리를 난감하게 한다. lazy evaluation의 사용과 Item 30에 언급된 proxy 클래스(위임 클래스, DP에서의 역할과 비슷할것이라 예상) 는 우리가 수정을 위하여 읽기나 쓰기 행동을 하는지의 결정을 연기하게 한다.
         객체의 각 필드는 필요한 데이터의 포인터로 표현되어 있고, LargeObject의 생성자는 null로 초기화 된다. 그런 null 포인터는 아직 데이터 베이스에서 해당 필드의 정보를 안읽었다는 걸 의미한다. 데이터를 접근하기 전에 LargeObject의 각 멤버 함수는 반드시 이 필드의 포인터를 검사한다. 만약 포인터가 null이라면 데이터를 사용하기 전에 반드시 데이터 베이스에서 읽어 온다.
         '''lazy fetching'''을 적용 하면, 당신은 반드시 field1과 같은 const멤버 함수를 포함하는 어떠한 멤버 함수에서 실제 데이터 포인터를 초기화하는 과정이 필요한 문제가 발생한다.(const를 다시 재할당?) 하지만 컴파일러는 당신이 const 멤버 함수의 내부에서 데이터 멤버를 수정하려고 시도하면 까다로운(cranky) 반응을 가진다. 그래서 당신은 "좋와, 나는 내가 해야 할것을 알고있어" 말하는 방법을 가지고 있어야만 한다. 가장 좋은 방법은 포인터의 필드를 mutable로 선언해 버리는 것이다. 이것의 의미는 어떠한 멤버 함수에서도 해당 변수를 고칠수 있다는 의미로, 이렇게 어떠한 멤버 함수내에서도 수행할수 있다. 이것이 LargeObject안에 있는 필드들에 mutable이 모두 선언된 이유이다.
         mutable 키워드는 최근에 C++에 추가되어서, 당신의 벤더들이 아직 지원 못할 가능성도 있다. 지원하지 못한다면, 당신은 또 다른 방법으로 컴파일러에게 const 멤버 함수 하에서 데이터 멤버들을 고치는 방안이 필요하다. 한가지 가능할 법인 방법이 "fake this"의 접근인다. "fake this"는 this가 하는 역할처럼 같은 객체를 가리키는 포인터로 pointer-to-non-const(const가 아닌 포인터)를 만들어 내는 것이다. (DeleteMe 약간 이상) 당신이 데이터 멤버를 수정하기를 원하면, 당신은 이 "fake this" 포인터를 통해서 수정할수 있다.:
          // 자 이것이 fake This 인데, 저 포인터로 this에 대한 접근에서 const를 풀어 버리는 역할을 한다.
          포인터를 넘기는 부분
         이 함수는 *this의 constness성질을 부여하기 위하여 const_cast(Item 2참고)를 사용했다.만약 당신이 const_cast마져 지원 안하면 다음과 같이 해야 컴파일러가 알아 먹는다.
         자, 그럼 다시 한번 LargeObject내의 포인터들에 관하여 생각해 보자. 사용하기전에 각각의 포인터들을 검사하는 것에 비해서, 모든 포인터들이 null로 초기화 되어 있는것은 에러의 가능성을 가지고 있다. 다행히도, 이런 우려는 Item28의 ''smart pointers''의 이용으로 편이성을 제시한다. 만약 LargeObject내부에서 smart pointer를 사용한다면 당신은 아마도 더이상 포인터를 mutable하게 선언할 필요가 없을것이다. 당신이 mutable을 필요로 하는 상황이, smart pointer클래스들의 적용으로 가기 때문에 위의 내용은 좀 임시적인것이다. 이런 문제에 관해 한번 생각해 봐라
         '''''lazy evaluaion''''' 방법에서는 저건 너무 엄청난 수행을 하는 방법이라 하고, 그래서 그것을 수행하지 않는다. 대신에 m3내부에 m1과 m2의 합을 했다는 것만을 기럭해 둔다. 그런 자료 구조는 아마도 m1과 m2나 그이상의 더하기를 하기 위한 포인터 외에는 아무런 정보를 유지할 필요가 없을 것이다. 명백히 이건 m1,m2에 대한 실제 더하기보다 훨씬 빠르고 말할것도 없이 훨씬 적은 메모리를 사용할 것이다.
         그러므로 몇가지의 m1에 대한 할당이 m3를 변화시키지 않는다는 확신을 가지고 있어야 한다. Matrix<int>의 내부에 할당된 operator 내부에 m3의 값이 m1의 계산 이전에 계산되어 있거나, m1의 과거 값에 대한 복사본을 가지고 있고 m3는 그것에 의존해야 한다. 다른 함수들도 이러한 행렬의 변경을 위하여 다른 형식의 함수들도 이런 비슷한 것을 감안해야 할것이다.
         이제까지 언급했던 예제 코드들을 다시 한번 봐라 당신은 클래스 인터페이스만이 주어진다면 그것이 eager, lazy인지 알수는 없을 것이다. 그것의 의미는 eager evaluation도 역시 곧바로 적용 가능하고, 반대도 가능하다는 의미이다. 만약, 연구를 통해서 클래스의 구현에서 병목 현상을 보이는 부분이 보인다면, 당신은 lazy evaluation의 전략에 근거한 코드들을 적용 할수 있을 것이다. 당신의 클라이언트들은 이러한 변화가 성능의 향상으로 밖에 보이지 않는다. 고객(클라이언트들)들이 좋와하는 소프트웨어 향상의 방법, 당신이 자랑스로워하는 lazy가 될수 있다. (DeleteMe 모호)
         자, 다음 예제를 생각해 보자. 수치 데이터의 큰 calloections을 나타네는 클래스들을 위한 템플릿이다.
         min, max, avg에 함수는 현재의 해당 collection의 최소값, 최대값 평균을 반환하는 값이라고 생각해라, 여기에서 이들이 구현될수 있는 방법은 3가지 정도가 있다. eager evaluation(즉시연산)을 이용해서 min, max, avg가 호출될때마다 해당 연산을 하는 방법. lazy evaluation(게으른연산)을 해서 해당 함수값이 반환하는 값이, 실제로 연산에 필요할때 마지막에 계산에서 연산해서 값을 얻는 방법. 그리고 over-eager evaluation(미리연산)을 이용해서 아예 실행중에 최소값, 최대값, 평균값을 collection내부에 가지고 있어서 min, max, avg가 호출되면 즉시 값을 제공하는 방법-어떠한 계산도 필요 없이 그냥 즉시 돌리는거다. 만약 min, max, avg가 자주 호출된다면 collection의 최소값, 최대값, 평균값을 이용하는 함수들이 collection 전역에 걸쳐서 계산을 필요로 할수 있다. 그렇다면 이런 계산의 비용은 eager,lazy evaluaton(게으른연산, 즉시연산)에 비하여 저렴한 비용을 지출하게 될것이다.(필요값이 즉시 반환되니)
         이런 일을 행하는데에 가장 간단한 방법은 이미 계산된 값을 저장시켜 놓고, 다시 필요로할때 쓰는거다. 예를들어 당신이 직원들에 관한 정보를 제공하는 프로그램을 만든다고 가정하자, 그리고 당신이 자주 쓰인다고 예상할수 있는 정보중 하나는 직원들의 개인방(사무실 or 침실 or 숙소) 번호 이다. 거기에 직원들의 정보는 데이터 베이스에 저장되어 있다고 가정한다. 하지만 대다수(당신이 작성하는거 말고) 프로그램을 위하여 직원들의 개인방 번호는 잘 쓰이지 않는다. 그래서 데이터 베이스에서 그것을 찾는 방법에 관한 최적화가 되어 있지 않다. 당신은 직원들의 개인방 번호를 반복적으로 요구하는 것에 대한 데이터 베이스가 받는 과도한 스트레스에 어플리케이션단에서 특수한 구조로 만드는 걸 피하려면, findCubicleNumber 함수로서 개인방 번호를 캐시(임시저장) 시켜 놀수 있다. 이미 가지고 있는 개인방 번호에 대하여 연속적으로 불리는 요구는 데이터 베이스에 매번 쿼리(query)를 날리는것보다는 캐쉬를 조사하여 값을 만족 시킬수 있다.
  • AcceleratedC++/Chapter13 . . . . 113 matches
         몇 가지 추가사항을 제외하면 한클래스와 다른 클래스가 동일한 경우가 많다는 데에 착안해서 나온 개념이다.
          double thesis; // 논문관련 점수를 저장하는 멤버변수
         Grad 클래스는 Core로 부터 파생되었다(Derived from), 상속받았다(inherits from), 혹은 Core는 Grad의 base class 이다 라는 표현을 사용한다.
         상속받은 클래스는 그 부모클래스의 생성자, 소멸자, 대입연산자를 제외한 그외의 모든 클래스의 요소를 물려받는다.
         또한 파생 클래스는 부모 클래스의 메소드를 재정의 하여서 자신에게 맞도록 수정하여 동작하는 것을 허용한다.
          private 보호 레이블로 지정된 멤버는 그 클래스 자체, friend 함수를 통해서만 직접적으로 접근이 가능하다. 이 경우 상속된 클래스에서는 부모 클래스의 private 멤버로의 접근이 필요한데 이럴때 '''protected'''라는 키워드를 사용하면 좋다.
          protected 레이블로 지정된 멤버들은 자식 클래스에서 직접적인 접근이 가능다. 그러나 클래스의 외부에서는 접근이 안되기 때문에 캡슐화의 장점을 유지시킬 수 있다.
          Core, Grad의 생성자 4가지. 각기의 클래스에 따라 다르게 행동하게 되는 read, grade 함수. Core 클래스의 name, read-common 함수.
          '''Grad::read 함수의 오버로딩'''
          상기의 클래스는 Grad의 멤버 함수로 부모 클래스의 read_common, read_hw의 함수를 그대로 상속받았다는 것을 가정한다.
          in >> thesis; // thesis는 Core가 아니라 Grad의 멤버 변수이므로 범위 지정 연산자를 사용해서는 안된다.
          '''thesis가 적용된 점수를 리턴하는 Grad::grade() 함수'''
          return min(Core::grade(), thesis); // min()은 <algorithm>에 정의된 함수이다.
          '''파생 클래스의 생성단계'''
          || * 전체 객체에 대한 공간을 할당 [[HTML(<BR/>)]] * 기본 클래스 생성자 호출, 기본클래스 공간 초기화 [[HTML(<BR/>)]] * 생성자의 초기설정자''( ): { 사이에 존재하는 것들 )''를 이용해서 파생클래스멤버 초기화 [[HTML(<BR/>)]] * 파생 클래스의 생성자의 본체를 실행한다. ||
         상기의 함수는 sort에 의해서 각 요소의 판단식으로 사용되는 함수이다. 이 함수는 부모객체인 Core 객체 뿐만아니라, 자식 객체인 Grad객체도 대입하여 사용하는 것이 가능하다.
         '''Grad 클래스가 사용가능한 이유'''
         비록 함수가 요구하는 인자값은 Core 클래스 이지만 Grad는 Core를 기반으로해서 파생된 클래스이기 때문에 이 경우 name();를 호출하게 되면 g 객체의 Core::name() 부분이 호출된다.
         다시 말해서 Grad가 Core의 자식 클래스 이므로 Grad객체를 통해서 Core클래스함수를 바인딩시켜 사용하는 것이 가능하다는 뜻이다. ''(대신에 이 함수의 안에서는 Grad의 Core 의 요소들만을 취한다.)''
          '''grade와 유사한 기능을 하는 compare_grade 함수'''
  • MoreEffectiveC++/Exception . . . . 86 matches
         귀여븐 동물들 클래스를 만들어 보자.
         일단 여러분은 파일에서 부터 puppy와 kitten와 키튼의 정보를 이렇게 읽고 만든다. 사실 Item 25에 언급할 ''virtual constructor''가 제격이지만, 일단 우리에 목적에 맞는 함수로 대체한다.
         pa에 해당하는 processAdoption()은 오류시에 exception을 던진다. 하지만, exception시에 해당 코드가 멈춘다면 "delete pa;"가 수행되지 않아서 결국 자원이 새는 효과가 있겠지 그렇다면 다음과 같이 일단 예외 처리를 한다. 물론 해당 함수에서 propagate해주어 함수 자체에서도 예외를 발생 시킨다.
         여기에서 재미있는 기법을 이야기 해본다. 차차 소개될 smart pointer와 더불어 Standard C++ 라이브러리에 포함되어 있는 auto_ptr template 클래스를 이용한 해결책인데 auto_prt은 이렇게 생겼다.
         예외 발생시에 함수가 종료되면 auto_ptr상의 객체는 무조건 해제된다.
         자자 예를들어서 이런 함수에서 예외 처리를 해야할것이다.
         이렇게 해도 여전히 문제는 남는다. 무엇이냐 하면, 만약 BookEntry의 생성자중에서 AudioClip 객체 생성중에 예외를 propagate하면 바로 위 코드중 pb 포인터에 null을 반환해 버린다. 반납된 이렇게 되면 이미 정상적으로 생성된 theImage를 지우지 못하는 사태가 발생해 버리는 것이다.
         자 이렇게 해주면 문제 될것이 없다. 자 이상태에 refactoring이 필요한 코드들이 보일것이다 하겠다. delete부분을 함수로 역어 네는 것이다.
         이런 const 포인터의 경우에는 반드시 초기화 리스트를 이용하여 인자를 초기화 해주어야 하는 경우이다.
         다음 예제는 online 컴퓨터 세션을 위한 Session 클래스를 생각해 본 것이다. 각 세션 객체들은 생성과 파되된 날짜를 기록해야만 한다.
         자 이건 괜찮아 보인다. 하지만 저 logDestruction상에서 예외가 발생한다면 어쩌게 할것인가? 해당 소스는 Session의 파괴자 안에서는 예외를 잡지 못한다. 그래서 해당 파괴자를 호출한 자에게 예외를 던진(전달한)다. 그렇지만 다른 에러들이 던져진 상황에서 파괴자가 스스로 자신을 부른거라면 함수의 종료가 자동으로 이루어지기를 원할 것이다. 그리고 당신의 프로그램은 이쯤에서 머추어 버릴 것이다. -해석이 이상하군, 암튼 다른 예외 처리시에 세션 파괴자 로그시 예외가 발생한다면 프로그램이 멈춘다는 소리다.
          * Item 12: 가상 함수 부르기나, 인자 전달로 처리와 예외전달의 방법의 차이점을 이해하라.
         다음의 가상함수의 선언과 같이 당신은 catch 구문에서도 비슷하게 인자들을 넣을수 있다.
         그래서 아마 함수호출에서 인자 전달과 과 예외가 전달되는 것이 기본적으로 같은것이라고 생각 할지도 모른다. 분명 둘은 비슷한 면이 있다. 하지만 중요한 차이점 역시 존재 한다.
         자, 비슷한 면은 언급해보면, 함수 예외 모두 에 인자를 전달할때 세가지로 전달할수 있다. 값(by value)이냐 참조(by reference)냐, 혹은 포인터(by pointer)냐 바로 이것이다. 하지만 이 함수와 예외에서의 인자의 전달 방식은 구동 방법에서 결정적인 차이점을 보인다. 이런 차이점은 당신이 함수를 호출할때 최종적으로 반환되는 값(returns)이 해당 함수를 부르는 위치로 가지만, 예외의 경우에 throw의 위치와 return의 위치가 다르다는 점에서 기인한다.
         다음 함수에서 Widget의 인자 전달과 예외에서의 전달을 생각해 보자.
         해당 사본은 구지 복사할 필요가 없을 것이다. 하지만 catch 는 복사해 나가고 그래야만 catch 에서 localWidget의 사본을 편집해서 이용할수 있다. 이러한 복사의 규칙은 함수 전달과 예외 인자 전달의 차이점을 설명해 준다.
         객체가 예외를 위하여 복사가 될때 복사는 해당 객체의 복사생성자(copy constructor)에 의하여 수행 된다. 이 복사생성자는 객체의 dynamic형이 아닌 static 형에 해당하는 클래스중 하나이다. 개념의 확인을 위해 위 소스의 수정 버전을 생각해 보자
         전달된 객체는 간단히 참조로 잡을수 있다;그것은 상수 참조로 전달될 필요성은 없다. 그러나 상수 참조가 아닌 전달 임시 객체들은 함수를 부르는걸 허용하지 않는다.
         우린 아직 포인터 전달에 의한 걸 의논하지 않았다. 하지만 포인터를 이용해 예외를 던지(전달:throw)하는 것은 함수상에서 포인터를 전달(pass)하는 것과는 다른걸 알수 잇을 것이다. 즉, 포인터의 복사본이 이동하는데, 이렇게 되면 pointer를 전달하는 쪽의 영역에서 throw에 의해 튀어 나가면 포인터가 가리키고 있는 객체는 소멸되므로 포인터에 의한 예외 전달(던지는것:throw)는 피해야 한다. (전역의 static 객체의 포인터라면 이야기는 달라진다. 뒤에 다룬다.)
  • Gof/FactoryMethod . . . . 84 matches
         객체 생성을 위한 인터페이스를 정의하라, 그렇지만 sub 클래스들이 구현사항을 결정할수 있도록 하자. [[BR]]
         Factory Method는 sub 클래스에 대해 구현 사항을 결정할수 있게 만든다.
         Framework(이하 Framework 그대로)는 객체사이의 관게를 정의하고, 유지하기 위하여 가상 클래스들을 사용한다. Framework는 종종 이러한 클래스들을 기반으로 객체의 생성에 책임을 진다.
         여러 문서를 사용자에게 보여줄수 있는 어플리케이션에 대한 Framework에 대하여 생각해 보자. 이러한 Framework에서 두가지의 추상화에 대한 요점은, Application과 Document클래스 일것이다. 이 두 클래스다 추상적이고, 클라이언트는 그들의 Application에 알맞게 명세 사항을 구현해야 한다. 예를들어서 Drawing Application을 만들려면 우리는 DrawingApplication 과 DrawingDocument 클래스를 구현해야 한다. Application클래스는 Document 클래스를 관리한다. 그리고 사용자가 Open이나 New를 메뉴에서 선택하였을때 이들을 생성한다.
         Application(클래스가 아님)만들때 요구되는 특별한 Document에 대한 Sub 클래스 구현때문에, Application 클래스는 Doment의 Sub 클래스에 대한 내용을 예측할수가 없다. Application 클래스는 오직 새로운 ''종류'' Document가 만들어 질때가 아니라, 새로운 Document 클래스가 만들어 질때만 이를 다룰수 있는 것이다. 이런 생성은 딜레마이다.:Framework는 반드시 클래스에 관해서 명시해야 되지만, 실제의 쓰임을 표현할수 없고 오직 추상화된 내용 밖에 다를수 없다.
         Factory Method 패턴은 이에 대한 해결책을 제시한다. 그것은 Document의 sub 클래스의 생성에 대한 정보를 캡슐화 시키고, Framework의 외부로 이런 정보를 이동 시키게 한다.
         Application의 Sub 클래스는 Application상에서 추상적인 CreateDocument 수행을 재정의 하고, Document sub클래스에게 접근할수 있게 한다. Aplication의 sub클래스는 한번 구현된다. 그런 다음 그것은 Application에 알맞은 Document에 대하여 그들에 클래스가 특별히 알 필요 없이 구현할수 있다. 우리는 CreateDocument를 호출한다. 왜냐하면 객체의 생성에 대하여 관여하기 위해서 이다.
          * 클래스가 그것이 생성하는 클래스에 관해서 예상할수 없을때
          * 클래스가 그것의 sub 클래스가 객체 생성에 최적화를 시키고 싶을때
          * 클래스가 몇개의 helper sub클래스에게 책임을 위임하거나, 당신이 helper sub클래스에 관한 정보를 특성화 시키기를 원할때
         Creator는 factor method가 정의되어 있는 Creator의 sub클래스에게 의지한다 그래서 Creator는 CooncreteProduct에 적합한 인스턴스들을 반환한다.
         Factory method는 당신의 코드에서 만들어야한 Application이 요구하는 클래스에 대한 기능과 Framework가 묶여야할 필요성을 제거한다. 그 코드는 오직 Product의 인터페이스 만을 정의한다.; 그래서 어떠한 ConcreteProduct의 클래스라도 정의할수 있게 하여 준다.
         factory method의 잠재적인 단점이라고 한다면 클라이언트가 아마도 단지 특별한 ConcreteProduct객체를 만들기위해서 Creator클래스의 sub클래스를 가지고 있어야 한다는 것일꺼다. 클라이언트가 어떤 식으로든 Creator의 sub클래스를 만들때의, sub클래스를 만드는 것자체는 좋다. 하지만 클라이언트는 이런것에 신경쓸 필요없이 로직 구현에 신경을 써야 한다.
          1. ''서브 클래스와 소통 통로 제공''(''Provides hooks for subclasses.'') Factory Method를 적용한 클래스에서 객체의 생성은 항상 직접 만들어지는 객체에 비하여 유연하다. Factory Method는 객체의 상속된 버전의 제공을 위하여, sub클래스와 연결될수 있다.(hook의 의미인데, 연결로 해석했고, 그림을 보고 이해해야 한다.)
          Ducument에제에서 Document클래스는 factory method에 해당하는, 자료를 열람하기 위한 기본 파일 다이얼로그를 생성하는 CreateFileDialog이 호출을 정의할수 있다. 그리고 Document sub클래스는 이러한 factory method를 오버 라이딩해서 만들고자 하는 application에 특화된 파일 다이얼로그를 정의할수 있다. 이러한 경우에 factory method는 추상적이지 않다. 하지만 올바른 기본 구현을 제공한다.
          2. ''클래스 상속 관게에 수평적인(병렬적인) 연결 제공''(''Connects parallel class hierarchies.'') 여태까지 factory method는 오직 Creator에서만 불리는걸 생각해 왔다. 그렇지만 이번에는 그러한 경우를 따지는 것이 아니다.; 클라이언트는 수평적(병렬적)인 클래스간 상속 관계에서 factory method의 유용함을 찾을수 있다.
          병렬 클래스 상속은 클래스가 어떠한 문제의 책임에 관해서 다른 클래스로 분리하고, 책임을 위임하는 결과를 초례한다. 조정할수 있는 그림 도형(graphical figures)들에 관해서 생각해 보자.;그것은 마우스에 의하여 뻗을수 있고, 옮겨지고, 회정도 한다. 그러한 상호작용에 대한 구현은 언제나 쉬운것만은 아니다. 그것은 자주 늘어나는 해당 도형의 상태 정보의 보관과 업데이트를 요구한다. 그래서 이런 정보는 상호 작용하는, 객체에다가 보관 할수만은 없다. 게다가 서로다른 객체의 경우 서로다른 상태의 정보를 보관해야 할텐데 말이다. 예를들자면, text 모양이 바뀌면 그것의 공백을 변화시키지만, Line 모양을 늘릴때는 끝점의 이동으로 모양을 바꿀수 있다.
          이러한 제한에서는 모양에따라, 각 상테에 따라 객체를 분리하는 것이 더 좋을 것이고, 각자 필요로하는 상태를 유지 해야한다. 서로 다른 모양은 서로다른 Manipulator의 sub클래스를 사용해서 움직여야 한다.이러한 Manipulator클래스와 상속은 병렬적으로 이루어 진다. 다음과 같은 모양 같이 말이다.
         Figure클래스는 CreateManipulator라는, 서로 작용하는 객체를 생성해 주는 factory method이다. Figure의 sub클래스는 이 메소드를 오버라이드(override)해서 그들에게 알맞는 Manipulator sub클래스의 인스턴스를 (만들어, )반환한다. Figure 클래스는 아마도 기본 Manipulator인스턴스를 (만들어,) 반한하기 위한 기본 CreateManipulator를 구현했을 것이다. 그리고 Figure의 sub클래스는 간단히 이러한 기본값들을 상속하였다. Figure클래스 들은 자신과 관계없는 Manipulator들에 대하여 신경 쓸필요가 없다. 그러므로 이들의 관계는 병렬적이 된다.
         Factory Method가 두게의 클래스의 상속 관계에서 어떻게 이러한 연결과정을 정의하는지 주목하라. 그것은 서로 고유의 기능을 부여시키는 작업을 한다.
  • 02_C++세미나 . . . . 81 matches
          * 확장형(구조체,클래스 등등)
          int HP; // 멤버
         // 이제 질롯형의 변수 z1이 만들어졌습니다. 이제 z1의 멤버를 설정해줘야겠죠? 멤버에 접근할때는 .을 씁니다.
         == 포인터 ==
          * 포인터란?
         포인터란 무엇이냐 하면... 포인터는 변수이다. (변수가 무엇인지는 알꺼라고 본다.)
         그럼 포인터가 변수이긴 한데 과연 무엇을 저장하는 변수란 말인가??
         과연 포인터는 무엇을 저장하는 변수인가??
         포인터는 바로 변수의 메모리 주소를 저장하는 변수이다. (그러므로 포인터는, 그 포인터가 어떤 종류의 변수의 주소값을 가지느냐에 따라서 변수의 가짓수 만큼의 변형이 있다. 왜 여러 종류의 포인터가 필요한지는 나중에 포인터의 연산(물론 포인터도 변수이므로 연산, 비교, 대입 등 거의 일반변수에서 가능한 모든 것이 가능하다)에서 설명하겠다.)
         그렇다면 대체 왜 이다지도 복잡한 포인터를 쓰는가? 내가 알기로는 포인터는 C 와 C++ 언어에서만 존재하는 기능이다. 동시에 사람들이 C 와 C++ 를 어려워하는 이유이기도 하다. 왜 사람들은 C 에만 있는 기능인 포인터를 어려워 하는가. 그건 포인터를 써야만 하는 어떤 '이유' 가 있는게 아닐까? 재미있게도, 사람들이 C 언어를 좋아하는 이유가 '포인터의 강력함' 때문인 경우가 많다.
         여러가지로 말이 많았는데 이쯤에서 포인터의 쓰임에 대해 간략하게나마 설명하겠다. 포인터의 이론적인 정의는 무엇인가. 바로 '메모리의 주소를 가지고있는 변수'란 것이다. 그건, 동시에 포인터를 이용하면 그 해당하는 메모리로의 직접적인 접근과 제어가 가능하다는 뜻이다. 그렇다면 포인터의 역활은 메모리로의 직접적인 억세스가 되는것이고, 여기에 포인터의 연산을 통해 거의 어셈블리언어에 가까운정도의 저수준 메모리 제어를 가능케 한다. 바로 그것이 포인터의 존재이유이며 쓰임이다. 이런 이론적인 포인터의 쓰임 말고, 직접적인 강함의 체험을 원한다면, 여러분이 직접 사용해볼것을 권한다.
          * 포인터는 어떻게 만들까?
         그렇다면 포인터는 어떻게 만들까?
         포인터는 다음과 같이 *만 쓰면 만들 수 있다.
         int *a; // 정수형 변수의 메모리 주소를 저장하는 변수(정수형 포인터라고 함..)
         char *b; // 문자형 변수의 메모리 주소를 저장하는 변수(문자형 포인터)
         (int *) pi; /* 이런 식으로 사용하면 좀더 명확하다. 정수의 포인터라는. */
         정수형 변수의 메모리 주소를 저장하는 포인터가 되고, b는 문자형 변수의 메모리 주소를
         저장하는 포인터가 된다.
          * 포인터의 사용
  • AcceleratedC++/Chapter9 . . . . 79 matches
         || 클래스 타입 || string, vector, istream 등 기본언어를 가지고 구현된 타입 ||
         C++은 클래스 타입과 같은 사용자가 정의한 어플리케이션 고유의 타입을 정의할 수 있는 많은 기능은 지원한다.
         4.2.1절 Student_info 구조체를 다루는 함수를 작성하고, 이를 한개의 헤더파일로 통합을 하는 것은 일관된 방법을 제공하지 않기 때문에 문제가 발생한다.
         본 장에서는 기존의 구조체를 확장하여 함수를 작성하고 이런식의 문제를 해결할 수 있는 방법을 알려준다.
         프로그래머는 구조체를 다루기 위해서 구조체의 각 멤버를 다루는 함수를 이용해야한다. (Student_info 를 인자로 갖는 함수는 없기 때문에)
          === 9.2.1 멤버 함수 ===
          '''상기의 구조체안에 Student_info 를 다룰 수 있는 멤버함수를 추가한 것'''
          std::istream& read(std::istream&); //입력 스트림으로 부터 입력을 받아서 4개의 멤버변수를 초기화한다.
          double grade() const; //내부 멤버변수를 활용하여 점수를 계산하고 double 형으로 리턴한다.
          //함수 명의 뒤에 const를 붙이면 멤버 변수의 변형을 할 수 없는 함수가 된다. (구조적으로 좋다)
          * s:Student_info 라면 멤버함수를 호출하기 위해서는 s.read(cin), s.grade() 와 같이 함수를 사용하면서 그 함수가 속해있는 객체를 지정해야함. 암묵적으로 특정객체가 그 함수의 인자로 전달되어 그 객체의 데이터로 접근이 가능하게 된다.
          이 함수에서 알아야할 3가지
          * 함수의 이름이 Student_info::read이다
          * Student_info의 멤버함수이므로 Student_info 객체를 정의할 필요도 인자로 넘길 필요도 없다.
          ::를 사용함으로써 호출되는 grade를 객체의 멤버함수가 아니라 전역 grade의 형으로 사용하는 것이 가능하다.
          객체에서는 const 객체 내부의 데이터들을 const형으로 다룰 수는 없지만, 멤버함수를 const 멤버함수로 만듦으로써 변형에 제한을 줄 수 있다.
          * const 객체에 대해서는 const 멤버함수가 아닌 함수는 호출 할 수 없다.
          === 9.2.2 비멤버 함수들 ===
          이전에 사용되었던 compare와 같은 함수를 어떤식으로 정의해야 할 것인가?
          compare함수는 동일한 형의 2개의 Student_info를 받아서 서로를 비교하는 역할을 한다. 이런함수를 처리하는 일반적인 방법이 있는데, 9.5, 11.2.4, 11.3.2, 12.5, 13.2.1 에서 배우게됨.
  • AcceleratedC++/Chapter11 . . . . 77 matches
         실제로 클래스를 제작할 경우에는 클래스의 생성, 복사, 대입, 소멸의 고려하여 설계되어야한다.
         이장에서는 STL vector클래스의 약식 버전을 만들어 보면서 일반적인 형태의 자료형을 만드는 방식을 익힌다.
         클래스를 설계할때에는 우선 인터페이스를 결정해야한다. 인터페이스의 결정에는 실제로 그 객체를 이용한 프로그램을 작성해보는 것이 좋다.
         이상의 것들이 이장에서 구현할 vector 의 clone 버전인 Vec 클래스를 구현할 메소드들이다.
          템플릿은 함수뿐만 아니라 클래스에서도 사용하는 것이 가능하다.
          begin, end, size 함수를 구현해야 하므로 이러한 작업을 위해서 '''첫 요소의 주소, 마지막 요소를 하나 지난 주소, 요소들의 개수'''를 저장할 수 있어야한다.
          T* limit; // 마지막 요소에서 하나를 지난 곳의 포인터
          템플릿은 단지 틀일 뿐이며, 사용할때 type parameter로 준 형에 따라서 실제의 클래스를 생성한다.
          // 표준 vector 클래스는 크기와 함께 초기화 요소를 인자로 받는 생성자도 제공한다.
          Vec() { create(); } // 아직으로선느 구현부분에서 정해진 것이 없기 때문에 임시적으로 함수를 만들어서 넣었다.
          T* limit; // 마지막 요소에서 하나를 지난 곳의 포인터
          인자의 기본형을 지정해주면 한개의 함수정의로도 2가지의 생성자의 역할을 할 수 있기 때문에 편리하다.
          back_inserter(T)함수를 통해서 동적으로 크기를 변경시키기 위해서 '''value_type, push_back''' 타입을 정의함. (value_type 은 현재 저장된 요소가 어떤 타입인지를 알려줌)
          list의 반복자를 구현하는 경우라면 ++ 연산을 통해서 노드로 연결된 다음 노드를 리턴하는 함수를 오버로딩해야하나, 여기서는 배열의 요소를 가리키므로 단순이 포인터를 리턴하는 것 만으로 우리는 임의 접근 반복자를 구현하는 것이 가능하다.
          Vec() { create(); } // 아직으로선느 구현부분에서 정해진 것이 없기 때문에 임시적으로 함수를 만들어서 넣었다.
          iterator limit; // 마지막 요소에서 하나를 지난 곳의 포인터
          절적한 typedef를 추가하고, 멤버 데이터의 형도 여기에 맞추어서 변경하였음.
          상기의 연산을 가능하게 하기 위해서는 operator[], size() 함수를 정의 해야한다.
          만약 오버로드 연산자가 멤버함수가 아니라면(friend 함수) 좌측 피연산자는 첫번째 인수, 우측 피연산자는 두번재 인수로 나타낼 수 있다.
          만약 멤버 함수로 연산자가 정의 되어 있다면 좌측 피연산자는 함수를 호출한 객체로 간주되고 오버로드 연산자는 인자로 우측의 피연산자만을 인자로 취한다.
  • JavaStudy2003/두번째과제/노수민 . . . . 75 matches
          Run쪽 옵션이 틀린건가;; 오류가 아니라 메인 클래스가 없다는 등의 다양한 메시지가 뜨면서 안돼요; 결국 간단한 소스를 올립니다
          * 클래스 : 특정한 종류의 모든 객체들에 적용할 수 있는 변수와 메소드를 정의하는 '소프트웨어적인 설계도' 이다.
          * 인스턴스 : 클래스에 대한 변수를 선언하는 것을 '인스턴스를 생성한다'고 하고, 이 변수를 인스턴스라 한다.
          * 객체 : 실세계에 적용 - 자동차(클래스) -> 아반테, 누비라, 그랜저, 티고 등 (객체)
          * 상속 : 자동차 클래스에 버스 클래스, 트럭 클래스, 자가용 클래스가 속한다면,
          자동차 클래스는 상위 클래스, 버스,트럭,자가용 클래스를 하위클래스라 하며, 이들의 관계에서 "하위클래스는 상위클래스를 상속한다"고 한다.
          자바에 메소드(함수) 다중정의, 매소드 재정의가 있다.
         === 클래스 정의 및 인스턴스(객체) 생성 ===
          * 클래스 정의
         class 클래스이름 {
          클래스이름 클래스인스턴스이름 = new 클래스이름();
         클래스이름 클래스인스턴스이름;
         클래스인스턴스이름 = new 클래스이름();
          * public - 같은 클래스, 하위클래스 등 같은 패키지의 모든 클래스에서 접근가능
          * private - 같은클래스 내에서만 접근가능
          * protected - 같은 클래스, 하위클래스 등 같은 패키지의 모든 클래스에서 접근가능
          * 생략 : 같은 클래스 또는 같은 패키지의 모든 클래스에서 접근가능, 하위클래스에서 접근 불가능
          * 자바에서는 함수 다중 정의만을 제공함
         클래스이름(형식매개변수 리스트) { … }
         클래스이름(형식매개변수 리스트) {
  • 새싹교실/2012/AClass/2회차 . . . . 72 matches
         9.101부터200까지의 모든 정수를 더해서 반환하는 '함수'를 작성해주세요.(main문에는 sum=Sum(); printf("%d",sum);이 있도록해주세요)
         10.재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
         12.재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
          result =self(a);// 재귀 함수
         2.srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
         - 난수(random number)를 생성할때 stdlib.h헤더파일을 코드에 포함시키고 srand()를 사용한다.rand()함수는 매번 그 값이 같은 반면에 매실행때마다 난수를 다르게 생성하기 위해서 srand()를 사용한다.
         이러한 코드개선을 위해서 time()함수를 사용해야 한다. 이 함수를 사용하기 위해 time.h 헤더 파일을 코드에 포함시켜야 한다. 또한 time함수는 1970년 1월 1일 이후 경과된 시간을 초 단위로 반환하는 함수 이다.
          printf("rand()함수를 사용,1개의 random number 나타내기 \n");
         3.포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
         -포인터는 기억장소에 있는 어떤 변수의 주소를 말한다. 즉, 다른 기억장소 위치의 주소를 갖고 있는 변수이다.포인터는 두개의 단일 연산자인 &와 *로서 정의한다. &연산자는 일반적인 변수 이름으로 사용되고 그 변수의 주소를 의미한다. 즉 &a는 a의 주소를 의미한다. *p는 p안에 있는 주소 위치의 내용을 의미한다. &는 주소 연산자이고 , *는 간접 연산자로 포인터선언을 의미한다. 일반적인 포인터 선언형식: 데이터형 *포인터변수명; 이다.
         4.배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
         -공통적인 부분은 배열이 첨자에 의해서 행해지는 조작은 포인터로서 모두 표현할 수 있다는 것이다.
         위와 같은 표현 가능하다.(포인터명에 *을 사용하는 것은 지시하는 곳에 저장된 값을 나타내는 것이다.)
         차이점으로는 포인터는 변수인데 비해 배열은 상수이고 포인터는 언제든지 다른 대상을 가리킬수 있지만 배열은 선언될 때 그 위치가 이미 고정되어 다른 대상을 가리킬 수 없다.또한 포인터는 동적으로 결정할수 있지만 배열이 가리키는 배열의 크기는 선언할 때부터 정적으로 결정되어있다. 배열로 []연산자를 이용해 그 값을 읽는 것과 포인터 간접 참조 연산으로 그 값을 읽는 것의 속도 차이가 있다.
         9. 101부터 200까지의 모든 정수를 더해서 반환하는 '함수'를 작성해주세요.
         10. 재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
         12. 재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
         2. srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
         seed값을 입력받아 난수를 생성하는 함수.
         #include <stdlib.h> //rand함수 사용
  • JavaStudy2004/클래스상속 . . . . 66 matches
          상속은 객체 지향 프로그램에서 가장 중요한 개념 중의 하나이다. 이것은 자바클래스를 직접 디자인하는 문제에 영향을 미친다.상속은 다른 클래스의 정보를 동적으로 액세스하도록 해주기 위해서 그 클래스와 다른 클래스와의 차이를 명시해주면 된다.
          각 클래스는 상위클래스(superclass)를가지며 하나 이상의 하위클래스(subclass)를 가진다.클래스들의 계층을 따라 내려가는 것을 상속된다고 한다.
          하위클래스는 상위클래스로부터 모든 메소드와 변수들을 상속받는다.상위클래스가 필요한 행위를 정의했으면 재정의하거나 다른 클래스로부터 복사할 필요도 없다. 상속받은 클래스는 자동적으로 상위클래스의 행위를 자동적으로 가지게 된다.자바 클래스 계층의 제일 위에는 Object라는 클래스가 있다. 모든 클래스는 이 클래스로부터 상속을 받는다. 각 클래스들은 특별한 목적에 맞추어 특정 정보를 추가적으로 가지게 되는 것이다.
          자바 클래스를 새로 작성할 때 대부분 다른 클래스가 가지는 정보와 몇 가지의 추가적인 정보를 가지게 할 것이다. 예를 들어 새로운 Button을 만들려고 한다면 클래스에 Button으로부터 상속받을 수 있도록 정의하기만 하면 된다. 따라서 Button과 다른 특징에 대해서만 신경 쓰면 된다.
         === 클래스 계층 만들기 ===
          많은 클래스를 만들기 위해서는 기존의 클래스 계층을 이용할 수도 있고, 자신만의 클래스 계층을 만들 필요도 있다. 이러한 계층을 만들기 위해서는 몇 가지 생각할 점이 있다.
          * 다른 클래스에 공통적인 정보를 추출해서 상위클래스에 넣고 하위클래스에서 다시 사용하도록 한다.
          * 한 클래스의 행위를 바꾸면 자동적으로 하위클래스의 행위를 바꾸게 한다. 따라서 재컴파일할 필요가 없다.
          예를 들어 Motorcycle클래스와 같이 Car라는 클래스를 만드는 것을 생각하자. Car와 Motorcycle은비슷한 특징들이 있다. 이 둘은 엔진에 의해 움직인다. 또 변속기와 전조등과 속도계를 가지고 있다. 일반적으로 생각하면, Object라는클래스 아래에 Vehicle이라는 클래스를 만들고 엔진이 없는 것과 있는 방식으로 PersonPoweredVehicle과 EnginePoweredVehicle 클래스를 만들 수 있다. 이 EnginePoweredVehicle 클래스는 Motorcycle, Car, Truck등등의 여러 클래스를 가질 수 있다. 그렇다면 make와 color라는 속성은 Vehicle 클래스에 둘 수 있다.
          인스턴스 변수의 경우 클래스에 새로운 변수를 만들었다면, 현재 클래스의 변수와 상위클래스에서 정의된 모든 변수를 가질수 있다. 따라서 모든 클래스들의 조합으로 현재의 객체를 위한 템플릿을 형성하게되고 필요한 정보를 채우는 것이다.
          메소드도 비슷하게 작동한다.새로운 객체는 상위클래스의 모든 메소드 이름을 액세스한다. 그러나 메소드가 호출될 때마다 동적으로 메소드 정의가 선택된다. 특정 객체에 대한 메소드를 호출하면 자바는 제일 먼저 그객체 클래스의 메소드 정의를 살펴본다. 그 객체 클래스에 정의되지 않았다면 그 메소드 정의를 발견할 때까지 상위클래스를 찾게될 것이다.
          만일 하위클래스에서 상위클래스의 메소드의 이름과 인자의 타입을 똑같이 가진 메소드를 정의한다고 하면 어떻게 되는가? 이것은 계층적으로 아래에 있는 것이 먼저 실행되게 되어 있다. 이러한 방식으로 임의로 상의클래스의 메소드를 감추고 하위클래스에 필요한 메소드를 정의할 수 있다. 바로 중복(overriding)이라고 부르는 것이다.
         === Point 클래스 ===
          * 클래스 이름 얻어오기
         === Shape 클래스 ===
          * 클래스 이름 얻어오기
         === Circle 클래스 ===
         === Rectangle 클래스 ===
         ===== 클래스 =====
          * Unit 클래스
  • HardcoreCppStudy/첫숙제/ValueVsReference/변준원 . . . . 63 matches
         변수가 매개변수로서 함수에 전달될 때 변수의 값만을 복사
         매개변수로 사용되는 변수에 대한포인터를 전달
         함수내에서 매개변수로 사용되는 변수의 값을 변경
         함수란 무엇인가?
         호출된 함수는 형식 매개 변수의 기억 장소를 별도로 유지.
         함수를 호출하는 프로그램의 실 인수 값을 호출된 함수의 형식 인수에 복사해서 다른 지역 변수들과 동일하게 취급.
         참조에 의한 인수 전달 기법은 실 매개 변수의 주소를 호출된 함수에 대응하는 형식 매개 변수에 보내는 방법.
         함수란 자료에 동작을 가하고 값을 반환하는 부 프로그램으로 C++프로그램에서 빠지질 수 없는 함수
         바로 main()함수로 처음 시작할 때 main()이 자동적으로 불려지고 또 main()이 다른 함수를 부를 수가
         먼저 함수에 대한 전반적인 소개를 하면..
         함수의 종류
         1) 일반함수
         2) 매크로 함수
         전처리계인 #define에 의해 정의되는 함수.
         3) inline함수
         매크로 함수의 특성을 갖지만 compiler에 의해 처리되며 일반함수와 동일한 매개변수 전달 방
         함수간의 정보 전달 방법
         주로 함수함수간의 정보 전달 방법으로 쓰인다.
          - 포인터 참조에 의한 호출(Call by pointer reference)
         일반함수에서 정의, 선언, 호출에 대해 예를 들면,
  • 새싹교실/2012/AClass . . . . 61 matches
          * 2주차(5/16) - 함수, 배열 + Search
          * 3주차(5/23) - 다차원배열, 포인터 + Search, Sort
          * 4주차(5/30) - 구조체, 2중포인터 + Stack, Queue
          1. 함수가 무엇인지 쓰고, 예제 프로그램을 하나 만들어 주세요.
          1. 함수형이 무엇인지 쓰고, void타입은 왜 return하지 않는지 써주세요.
          1. 재귀함수가 무엇인지 써 주세요.
          1. 재귀함수를 이용한 프로그램을 하나 짜 보세요.(eg.1~n까지의 합, n!구하기등)
          --> 라이브러리에서 우리가 사용하는 함수를 불러오기 위해써주는 것
          9.101부터200까지의 모든 정수를 더해서 반환하는 '함수'를 작성해주세요.(main문에는 sum=Sum(); printf("%d",sum);이 있도록해주세요)
          10.재귀함수를 이용해 n!을 출력하는 프로그램을 작성해 주세요.
          12.재귀함수를 이용해 1부터10까지를 더하는 프로그램을 작성해 주세요.
          1. srand()함수가 무엇인지 찾아쓰고, time()을 이용해 랜덤으로 숫자를 하나 출력하는 프로그램을 작성해주세요.
          1. 포인터가 무엇인지 쓰고, 포인터를 선언하는 방법을 쓰세요.
          1. 배열과 포인터의 공통점과 차이점을 찾아보고, 써보도록 하세요.
         * 배열개념, 함수 배웠습니다. 과제 일요일까지 내기, 프린트 해오기. 수정 사항 이었습니다.
          * 함수, 재귀함수, 배열.
          * 재귀함수 : 자기 자신함수를 다시 불러서 사용하는 함수
          * 함수, 배열을 배웠는데 수업시간에 배웠던것 같은데 아직은 헷갈린다
          6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
          9.포인터를 이용한 예제코드 하나를 짜 보세요.
  • HolubOnPatterns/밑줄긋기 . . . . 56 matches
          * 현실에서는 한 패턴에 참여하고 있는 객체와 클래스가 동시에 다른 패턴에서도 사용되는 경우가 매우 많다.
          * 패턴에 입문한 지 얼마 안 되는 초보자일수록 무언가 멋져 보이는 클래스 다이어그램에 관심을 쏟는데, 더욱 중요한 것은 '패턴의 의도'(혹은 목적)와 '동적인 행동양식'이다.
          * "객체는 메소드라 불리는 함수가 있는 자료 구조이며 메소드가 자료 구조를 조작한다."라는 설명을 보았을지도 모르겠다. 허튼소리! 당치 않다.
          * 이러한 착각은 흔히 C를 배우고 C++을 배울 때, '객체'가 아닌 문법 클래스'를 쉽게 설명하려고 "클래스는 structure(data) + method(to do) 이다." 라는 요상한 설명을 접하게 되면 하게 되는 것 같습니다. 처음에 이런 설명을 접하게 되면 나중에는 생각을 바꾸기 어려워지죠 (아니 귀찮아지는 건가...) -_-;; - [박성현]
          * 정답. 클래스는 구조체+메소드에요 라는 설명을 열혈강의 c++에서 본듯..? - [서지혜]
          * 2학년땐 나도 저렇게 생각했다ㅜㅜㅜ [Spring/탐험스터디]에서도 얘기했지만 그래서 객체지향설계라면 메소드만 있는 클래스는 존재해선 안된다고 말한 적도 있음ㅜㅜㅜㅜ 부끄럽다... - [김수경]
          * 이건 6피의 중심에서 외치고 싶은 말. 많은 후배들이 이런 질문을 한다. ''C로는 객체지향 못하는거 아니에여?'' ;;;;;;; 혹은 ''OOP로 짜고있어요 ㅋ''해서 보면 자바로 짠다는 것 외엔 도대체 객체지향의 원리가 어디에 녹아있는지 알 수 없는 코드라거나... 클래스 쓰면 다 OO냐ㅜㅜ 그렇게 간단하면 학교에서 왜 한학기나 할애해서 배우겠어. - [김수경]
          * 좋은 클래스는 getter와 setter메소드를 갖지 않는데, 이런 메소드는 구현 상세를 노출시키기 때문에 결과적으로 유지 보수를 어렵게 만들기 때문이다. 예를 들어 getter 메소드의 리턴 타입이 바뀌게 되면 getter를 정의하는 객체뿐 아니라 'getter'를 호출하는 모든 코드 또한 바꾸어 주어야 한다. 잠시 후에 getter와 setter 메소드 없이 시스템을 디자인하는 방법에 대해 설명할 것이다. 기대해도 좋다.
          * 이미 데이터를 갖고 있는 객체가 일을 하게 하는것은 어떨까? 다시 말해 신의 클래스에서 접근 메소드를 통해 가져온 데이터를 갖고 어떤 작업을 하는 코드를 이 데이터를 저장하고 있는 객체로 옮기면 어떨까? 접근 메소드는 사라지고 코드는 단순해진다.
          * 구현은닉이라는 원리는 객체 지향 시스템의 품질을 평가하는 좋은 지표가 된다. 클래스의 구현을 마음대로 바꾸어도, 심지어 기존 클래스를 버리고 새로운 클래스를 작성하더라도 이를 사용하는 객체의 코드에는 영향을 미치지 않을 수 있는가?
          * 이러한 '추측에 의한 디자인하기'전략은 사용하지도 않는 메소드를 작성하는데, 즉 필요치 않은 기능을 클래스에 추가하는 데 불필요한 시간을 낭비하게 한다.
          * 재미있네요. 나는 mfc는 객체 지향적이다 라는 말과 알수없는 클래스들을 만들어 놓고 객체지향이라고 한 말을 들은적이 있습니다. - [서지혜]
          * C++을 배우고 자바를 배우면 익숙한 구현 상속을 많이 사용하게 되지. C++에도 인터페이스의 개념이 있지만 시작부터 구체 클래스를 만드는 습관때문에 거의 쓰지 않았었다. - [서지혜]
         === 인터페이스 vs. 클래스 ===
          * 구현 상속이 도대체 왜 나쁠까? 명시적으로 구체 클래스의 이름을 사용하면 특정 구현에 종속되는데 이는 결과적으로 수정을 필요 이상으로 어렵게 만든다.
         ==== 깨지기 쉬운 기반 클래스 문제 ====
          * 기반 클래스는 기반 클래스만을 따로 떨어뜨려 놓고 안전하게 수정할 수 없으며, 모든 파생 클래스를 함께 살펴보고 테스트해 보아야 한다.
          * 슈퍼 클래스를 수정하면 알수없는 새끼 에러들이 창발한다ㅋㅋㅋ - [서지혜]
          * 구현 상속을 사용하면 기반 클래스를 수정할 때마다 파생 클래스들이 제대로 작동하는지를 테스트해야 한다.
          * 기반 클래스를 수정할 때마다 파생 클래스를 검토해 보아야 한다면 이는 기반 클래스를 확장하고 있는 것이 아니라 인터페이스를 구현하고 있는 것이다.
  • 작은자바이야기 . . . . 55 matches
          * 클래스와 객체
          * 클래스와 그 멤버에 적용하는 기본 modifier들의 개념 및 용법을 다뤘습니다.
          * static modifier에 대해 애매하게 알고 있었는데 자세하게 설명해주셔서 좋았습니다. static은 타입을 통해서 부르는거라거나 원래 모든 함수가 static인데 객체지향의 다형성을 위해 static이 아닌 함수가 생긴거라는 설명은 신기했었습니다. object.method(message) -> MyType::method(object, method) 부분이 oop 실제 구현의 기본이라는 부분은 잊어버리지 않고 잘 기억해둬야겠습니다. 근데 파이썬에서 메소드 작성시 (self)가 들어가는 것도 이것과 관련이 있는건가요? -[서영주]
          * 제가 "원래 모든 함수가 static"이라는 의미로 말한건 아닌데 오해의 소지가 있었나보군요. 사실 제가 설명한 가장 중요한 사실은 말씀하신 예에서 object의 컴파일 타입의 method() 메서드가 가상 메서드라면(static이 아닌 모든 Java 메서드), 실제 어떤 method() 메서드를 선택할 것이냐에 관한 부분을 object의 런타임 타입에 의한다는 부분이었지요. 그러니까 object는 컴파일 타입과 동일하지 않은 런타임 타입을 가질 수 있으며, 다형성의 구현을 위해 implicit argument인 object(=this)의 런타임 타입에 따라 override된 메서드를 선택한다는 사실을 기억하세요. (Python에선 실제 메서드 내에서 사용할 formal parameter인 self를 explicit하게 선언할 수 있다고 보면 되겠지요.) - [변형진]
          * JNI라는 기법을 사용해 네이티브 라이브러리를 연결하여 함수를 호출할 수 있음을 배웠습니다.
          * native modifier로 함수의 인터페이스를 선언할 수 있고, 마샬링, 언마샬링 과정에서 성능 손실이 있을 수 있음을 이야기했습니다.
          * 대표적인 불변객체인 String 클래스가 내부적으로 어떻게 구현되고, 어떻게 불변성을 유지하는 지를 살펴보았습니다.
          * c++에서 상호배제 관련으로 mutex나 critical section같은거 엄청 배웠었는데 자바에서는 synchronized를 이용해서 쉽게 처리할 수 있다는게 신기했습니다. os 수업 들은지 오래 됐는데 멀티프로세스와 멀티스레드 수업을 다시 들으니까 설명을 참 잘 해주셔서 좋았습니다. 함수에만 붙일 수 있는게 아니고 보호자원을 가진 객체를 이용한 synchronized(this){ ... } 같은 부분은 나중에 스레드를 쓸 경우에 참고가 될 것 같습니다. 그리고 인터페이스와 리플렉션을 이용한 초기화를 보니 생각을 잘 하면 구체클래스가 코드에 안드러나게 할 수 있다는 점도 볼만했습니다. -[서영주]
          * 전체적으로 다른 언어에서는 볼 수 없는 자바의 문법 + 객체지향 원칙을 중점적으로 다룬 시간이었습니다. 중간중간 다른 이야기들(builder 패턴, 저작권)이 들어갔지만 그래도 다룬 주제는 명확하다고 생각합니다. 다만 그걸 어떻게 쓰느냐는 흐릿한 느낌입니다. 그건 아마도 각 원칙들이나 interface, 객체 등에 대한 느낌을 잡기 위해서는 경험이 좀 필요하기 때문이 아닌가 싶습니다 ;;; 수경이가 말한 대로 한 번이라도 해 본 사람은 알기 쉽다는 말이 맞지 않을까 싶네요. 그리고 전체적으로 이야기를 들으면서 현재 프로젝트 중인 코드가 자꾸 생각나서 영 느낌이 찝찝했습니다. 세미나를 들으면서 코드를 생각하니까 고쳐야 될 부분이 계속 보이는군요. 그래도 나름대로 코드를 깔끔하게 해 보려고 클래스 구조도 정리를 좀 하고 했는데 더 해야 할 게 많은 느낌입니다. ㅠㅠ 그 외에도 이번 시간에 들었던 메소드의 책임이 어디에 나타나야 하는가(객체 or 메소드) 라거나 상속을 너무 겁내지 말라는 이야기는 상당히 뚜렷하게 와 닿아서 좋았습니다. 아. DIP에서 Logic과 native API 사이에 추상화 레이어를 두는 것도 상당히 좋았는데 기회가 되면 꼭 코드로 보고 싶습니다. 아마 다음에 보게 되겠지만. - [서민관]
          * 지난시간에 이은 Inner Class와 Nested Class의 각각 특징들 Encapsulation이라던가 확장성, 임시성, 클래스 파일 생성의 귀찮음을 제거한것이 새로웠습니다. 사실 쓸일이 없어 안쓰긴 하지만 Event핸들러라던가 넘길때 자주 사용하거든요. {{{ Inner Class에서의 this는 Inner Class를 뜻합니다. 그렇기 때문에 Inner Class를 포함하는 Class의 this(현재 객체를 뜻함)을 불러오려면 상위클래스.this를 붙이면 됩니다. }}} Iterator는 Util이지만 Iterable은 java.lang 패키지(특정 패키지를 추가하지 않고 자바의 기본적인 type처럼 쓸수있는 패키지 구성이 java.lang입니다)에 포함되어 있는데 interface를 통한 확장과 재구성으로 인덱스(index)를 통한 순차적인 자료 접근 과는 다른 Iterator를 Java에서 범용으로 쓰게 만들게 된것입니다. 예제로 DB에서 List를 한꺼번에 넘겨 받아 로딩하는것은 100만개의 아이템이 있다면 엄청난 과부하를 겪게되고 Loading또한 느립니다. 하지만 지금 같은 세대에는 실시간으로 보여주면서 Loading또한 같이 하게 되죠. Iterator는 통해서는 이런 실시간 Loading을 좀더 편하게 해줄 수 있게 해줍니다. 라이브러리 없이 구현하게 되면 상당히 빡셀 것 같은 개념을 iterator를 하나의 itrable이란 인터페이스로 Java에서는 기본 패키지로 Iterable을 통해 Custom하게 구현하는 것을 도와주니 얼마나 고마운가요 :) 여튼 자바는 대단합니다=ㅂ= Generic과 Sorting은 다른 분이 설명좀. - [김준석]
          * 리플렉션과 제네릭스를 써서 map -> object와 object -> map을 하는 부분을 해봤습니다. 자바의 일반적인 세 가지 방식의 클래스 내 변수에 대해 getClass, getFields, getMethods를 사용해 private, 나 접근자가 있는 경우의 값을 받아왔습니다. getter를 사용해서 변수 값을 받아올 때 이름이 get으로 시작하는 다른 함수를 제외하기 위해 method.getParameterTypes().length == 0 같은 부분은 이렇게 체크해야 된다는 부분은 나중에 제네릭스 관련으로 써먹을만 할 것 같습니다. 그리고 mapToObject에서는 문제가 없었지만 objectToMap의 경우에는 제네릭스의 type erase때문에 Class<T> expectedType = T.class; 같은 코드를 사용할 수 없어서 map.put(field.getName(), (T)field.get(obj));에서 형변환의 타입 안전성을 위해 인자로 Class<T> valueType을 받아오고 valueType.isAssignableFrom(field.getType())로 체크를 하는 부분도 공부가 많이 됐습니다. - [서영주]
          * Introspector : 클래스를 BeanInfo로 만들 수 있음.
          * util함수들을 많이 제공함. 한 번에 결과가 나옴.
          * google의 guava는 함수의 체이닝을 많이 사용함.
          * 함수의 체이닝을 위해서는 generics가 필요함. static method로는 체이닝을 할 수 없음.
          * Data 부분을 인터페이스로 분리 - 내부에서 FactoryMethod 패턴을 사용. factory를 통해서 객체를 생성한다. new를 사용하지 않기 때문에 구체 클래스를 숨길 수 있다.
          * CsvData - data의 구체 클래스. 내부에서 속도의 향상을 위해서 역색인 방식을 사용.
          * 값을 가져오는 함수를 getProperty와 get의 두 가지를 제공한다.
          * java.sql.driver 인터페이스를 com.mysql.jdbc.driver 클래스로 구현, java.sql.connection 인터페이스를 com.mysql.jdbc.connection 클래스로 구현
         Driver driver = new com.mysql.jdbc.Driver(); // 처럼 직접 구체클래스로 new를 하는 대신
  • AcceleratedC++/Chapter10 . . . . 54 matches
         포인터(pointer) 임의 접근 반복자로서, 배열의 요소들을 접근하기 위해서는 필수, 다른 용도로도 많이 이용된다.
          === 10.1.1 포인터 ===
          || 포인터(pointer) || 주소를 나타내는 값 ||
          || 역참조 연산자(dereference operator) || 포인터 p가 가리키는 객체를 리턴한다. ||
          보통 프로그래머가 포인터를 초기화시키는 값으로 이용하는 값은 0이다. 흔이 이를 '''널 포인터(null pointer)'''라고 부른다.
          포인터도 타입을 갖는데 일반적으로 type-name * 으로 정의한다.
          {{{~cpp int* p, q; // p는 int* 인 포인터 형식, q는 int 형을 가리킨다.
          === 10.1.2 함수에 대한 포인터 ===
          '''※ 함수포인터를 처음으로 다루는 사람은 조금 어려울 지도 모르겠습니다. 좀 어렵더라도 C, C++에서 많이 이용되는 테크닉이니 익히는 건 필수이겠지요?'''
          6.2.2 절에서 다른 함수의 인자로 함수를 전달하는 것을 보았다.
          함수에 대해서 우리가 할 수 잇는 것은 그 함수의 주소를 취하거나, 실행하는 것 밖에는 없다.
          함수에 대한 포인터를 인자로 전달하고 역참조 연산자를 통해서 그 포인터에 접근하면 우리는 원래의 함수에 접근하는 것이 가능하다.
         fp = next; // 상기의 2가지 표현 모두 next함수포인터를 fp에 대입하는 것이 가능하다.
          따라서 우리가 일반적으로 사용하는 함수의 표현만으로도 매개변수로 함수를 전달시키는 것이 가능한 것이다.
          하지만 이러한 자동 형 변환은 함수의 리턴형에는 적용되지 않는다. 따라서 함수를 리턴하는 경우에는 명식적으로 포인터임을 나타내야할 필요가 있다.
          상기의 코드에서 프로그래머가 원한 기능은 get_analysis_ptr()을 호출하면 그 결과를 역참조하여서 const vector<Student_info>&를 인자로 갖고 double 형을 리턴하는 함수를 얻는 것입니다.
          함수 포인터는 흔히 다른 함수의 인자로 이용된다.
         vector<int>::iterator i = find_if(v.begin(), v.end(), is_negative); // &is_negative 를 사용하지 않는 이유는 자동형변환으로 포인터형으로 변환되기 때문임.
          배열은 클래스 타입이 아니기 때문에 배열의 크기를 나타내는 size_type과 같은 요소는 없습니다. 대신에 C Standard Definition 이하 '''<cstddef>''' 에 '''size_t'''로 지정된 unsigned 타입으로 배열의 크기를 사용해야합니다.
          또한 배열의 이름은 그 배열의 요소의 첫번째 요소를 가리키는 포인터형으로 초기화 되기 때문에 배열과 포인터는 밀접한 상관 관계를 갖고 잇다.
  • AcceleratedC++/Chapter12 . . . . 53 matches
         일반적인 C++의 기본형 데이터처럼 클래스도 여러가지의 연산자를 재정의 함으로써 마치 값처럼 동작하도록 할 수 있다.
         이 장에서는 여러가지 연산자, 형변환을 클래스의 제작자가 제어하는 방법에 대해서 배운다.
         12장에서는 string 클래스의 클론 버전인 Str 클래스를 제작한다. Str 클래스는 string 클래스의 형변환과 연산자의 구현에 초점을 맞추어서 제작한다.
         이 클래스는 복사 생성자, 대입 연산자, 소멸자가 하는 모든일을 Vec클래스에 일임한다.
         클래스는 기본적으로 복사 생성자, 대입 연산자의 기본형을 제공한다. 위의 클래스는 이런 연산에 대한 기본적인 요건을 만족하기 때문에 const char* 가 const Str& 로 변환되어서 정상적으로 동작한다.
         상기의 클래스에는 Str(const char*) 타입의 생성자가 존재하기 때문에 이 생성자가 Str 임시 객체를 생성해서 마치 '''사용자 정의 변환(user-define conversion)'''처럼 동작한다.
         이 구현의 세부적인 작동방식은 모두 Vec 클래스로 위임하였다. 대신에 const 클래스와 const 가 아닌 클래스에 대한 버전을 제공하였고, 표준 string 함수와의 일관성 유지를 위해서 string 대신에 char& 형을 리턴하도록 하였음.
          입력 연산자는 일견 객체의 상태를 바꾸기 때문에 멤버함수로 선언이 되어야 한다고 생각하기 쉽다. 그러나 이항 연산자의 경우 파라메터의 맵핑이 좌항의 경우 첫번째 우항의 경우 두번째인자로 받는데, 이렇게 될 경우 멤버함수로 >>연산자를 오버로딩하면 우리가 워하는 결과를 얻을 수 없다.
          상기와 같은 이유로 operator>>는 비멤버함수로서 선언이 되어야 한다.
          s.data.clear(); // compile error. private 멤버로 접근
          do s.data.push_back(c); // compile error. private 멤버로 접근
          상기의 함수는 Str 자료형에 입력을 하기 때문에 Str 형에 대한 쓰기 권한이 필요하다. 그러나 9.3.1절처럼 단순히 입력 함수를 만들게 되면 일반 사용자가 객체의 내부 구조를 건드릴 수 있는 인터페이스를 제공하는 꼴이 되기 때문에 옳지 못하다.
          따라서 우리는 operator>>를 public 멤버로 만들고 data에 대한 쓰기 권한을 가지게 해서는 안된다.
          이런 경우의 함수를 '''friend''' 로 정의 하여 해결하는 것이 가능하다.
          함수를 friend 로 정의하면 인자로 받은 형에대해서는 형의 접근자가 무시된다.
          friend 함수는 접근제어 레이블에 영향을 받지 않기 때문에 어디에 선언을 해도 무관하나, 가능하면 클래스 선언의 최초 부분에 놓는 것이 좋다.
          * operator+는 각 인수로 받는 객체의 값을 변화시키지 ㅤㅇㅏㅎ는다. 따라서 비멤버함수로 구현하는 것이 적당하다.
          상기에서 구현된 operator+= 는 Vec를 copy함수를 이용해서 구현하였다.
          이런식으로 동작하게 하면 임시 변수의 생성으로 인한 오버헤드가 상당함으로 알 수 있다. 이런 문제를 해결하기 위해서 string 클래스는 자동변환에 의존하지 않고, 피연산자들의 모든 조합에 대해 결합 연산자를 제공한다.
          이항연산자는 비 멤버함수로 설계하는 것이 좋다. 이유는 멤버함수의 경우 첫번째 인자가 객체의 특정형으로 고정되기 때문에 자동 형변환을 이용할 수 없기 때문이다. 즉 대칭성(symmetry)를 유지하는 것이 가능하다.
  • AcceleratedC++/Chapter6 . . . . 52 matches
          * 근데 이것보다 더 일반적인, (즉 컨테이너에 독립적인) 방법이 있다. 컨테이너의 멤버함수를 이용하는 것이 아닌, 표준 알고리즘을 이용하는 것이다. 위의 것과 동일한 기능을 한다.
          * 다음으로 반복자 어댑터(Iterator Adapters)를 살펴보자. 반복자 어댑터는 컨테이너를 인자로 받아, 정해진 작업을 수행하고 반복자를 리턴해주는 함수이다. copy알고리즘에 쓰인 back_inserter는 ret의 뒤에다가 copy를 수행한다는 것이다. 그럼 다음과 같이 쓰고 싶은 사람도 있을 것이다.
          * 5장에서 공부한 것 중에 주어진 string을 공백을 기준으로 잘라서, vector에다 넣은 다음 리턴해주는 함수가 있었다.(split) 이것을 좀 더 간단히 만들어보자. 앞의 것은 굉장히 알아보기 힘들게 되어있다.
          * find_if의 인자를 보면, 앞의 두개의 인자는 범위를 의미한다. 첫인자~두번째인자 말이다. 마지막 인자는 bool형을 리턴하는 함수를 넣어준다. 즉 predicater이다. 그러면 find_if는 주어진 범위 내에서 predicator를 만족하는 부분의 반복자를 리턴해 준다.
          * isspace는 표준 라이브러리에서 지원하는 함수임에다 불구하고, 왜 따로 만들었을까? 바로 isspace는 여러 언어 버젼으로 오버로딩 되어 있기 때문이다. 템플릿 함수의 인자로 오버로딩된 함수를 넘겨주는 것은 쉽지 않다. 어떤 버젼인지 알수가 없기 때문이다. 이것이 우리가 isspace역할을 하는 함수를 새로 만든 이유다.
          * 5장에서는 string(i,j) 대신에, substr이라는 함수를 이용했었는데, 이번에 쓰지 않은 이유는 substr은 반복자를 인자로 받지 않기 떄문이다.
          * 참 깔끔하다. rbegin()은 역시 반복자를 리턴해주는 함수이다. 거꾸로 간다. equal함수는 두개의 구간을 비교해서 같을 경우 bool 의 true 값을 리턴한다. 파라매터로 첫번째 구간의 시작과 끝, 두번째 구간의 시작 iterator 를 받는다. 두번째 구간의 끝을 나타내는 iterator 를 요구하지 않는 이유는, 두개의 구간의 길이가 같다고 가정하기 때문이다. 이는 equal 함수의 동작을 생각해 볼때 합당한 처리이다.
         // find_if 함수의 테스팅에 이용되는 함수이다. char은 string 의 iterator의 값이다.
         //이 예제의 핵심 함수이다.
          * find_if(b, e, p) 문자열 시퀀스 [b, e)에서 함수 p를 통해 테스트한다.
          * static 스토리지 지정자는 함수의 최초 생성시 저장공간에 단 한번만 할당되며, 다시 호출을 하여도 새로 할당되지 않는다.
          ==== 모든 과제를 제출했는지를 판별하는 함수 ====
          find함수는 처음두개의 전달인자 범위에서 세번째 전달인자의 값을 찾지 못하면 2번째 전달인자를 리턴한다. (찾으면 첫번째전달인자
          empty멤버함수: 컨테이너가 비어 있으면 true, 아니면 false리턴
          ==== 초기 median_analysis 함수 ====
         // 이 함수는 제대로 동작하지 않습니다.
          transform함수: 처음2개의 전달인자 범의의 값들을 4번째함수에 대입 리턴값을 3번째 주소부터 넣음(?)
          1. grade함수는 오버라이딩된 함수이므로 컴파일러가 전달인자를 파악하지 못함
          새로운 함수 grade_aux 작성
          median_anlysis함수 수정
  • CToAssembly . . . . 52 matches
         프로그램을 실행하기위해 필요한 함수들을 모아둔 기본 라이브러리나 사용자가 만든 라이브러리는 사용자 소프트웨어에 포함된다.
         C/C++같은 고급언어의 컴파일러는 고급언어를 어셈블리코드로 변환할 수 있다. GNU C/C++ 컴파일러의 -S 옵션은 프로그램 소스에 해당하는 어셈블리코드를 생성한다. 반복, 함수 호출, 변수 선언과 같은 기본적인 구조가 어셈블리어로 어떻게 대응하는지 알면 C 내부를 이해하기 쉽다. 이 글을 이해하기위해서는 컴퓨터구조와 Intel x86 어셈블리어에 익숙해야 한다.
         = 함수(subroutine) =
         복잡한 프로그램을 만들때 우리는 해결할 문제를 체계적으로 나눈다. 그리고 필요할때마다 호출할 함수를 작성한다. 목록 3은 어셈블리어 프로그램의 함수 호출과 반환을 보여준다.
         call 명령어는 실행을 함수 foo로 옮긴다. foo의 ret 명령어는 실행을 다시 main의 호출 다음에 나오는 명령어로 옮긴다.
         일반적으로 함수함수가 사용할 변수들을 정의한다. 이 변수들을 유지하려면 공간이 필요하다. 함수 호출시 변수값을 유지하기위해 스택을 사용한다. 프로그램 실행중에 반복되는 재귀호출시(recursive call) activation record가 유지되는 방법을 이해하는 것이 중요하다. esp나 ebp같은 레지스터 사용법과 스택을 다루는 push와 pop같은 명령어 사용법은 함수호출과 반환방식을 이해하는데 중요하다.
         프로그램의 메모리 일부를 스택으로 사용하기위해 비워두었다. Intel 80386 이상의 마이크로프로세서에는 스택 최상위 주소를 저장하는, 스택포인터(stack pointer)라는 esp 레지스터가 있다. 아래 그림 1은 스택에 저장된 세 정수값 49, 30, 72를 보여준다 (정수는 각각 4 바이트를 차지한다). esp 레지스터는 스택 최상위 주소를 저장한다.
         스택포인터 레지스터는 4만큼 감소하고, 숫자 15를 4 바이트(주소 1988, 1989, 1990, 1991)에 저장한다.
         명령어 popl %eax는 스택 최상위에 있는 값(4 바이트)을 eax 레지스터에 복사하고 esp를 4만큼 증가한다. 만약 스택 최상위에 있는 값을 레지스터에 복사하고 싶지 않다면? 명령어 addl $4, %esp를 실행하여 스택포인터만 증가하면 된다.
         목록 3에서 명령어 call foo는 호출을 마친후 실행할 명령어의 주소를 스택에 넣고 foo로 분기한다. 함수는 ret에서 끝나고, 실행을 스택 최상위에서 가져온 주소에 있는 명령어로 옮긴다. 물론 스택 최상위에 유효한 반환주소가 있어야 한다.
         먼저 스택포인터의 값을 기준포인터 레지스터(base pointer register) ebp에 복사한다. 기준포인터는 스택의 다른 위치를 접근할때 사용할 고정된 기준점이다. foo를 호출한 코드에서도 ebp를 사용하므로, 값을 esp 값으로 대체하기 전에 스택에 복사한다. 명령어 subl $4, %esp는 스택포인터를 감소하여 정수를 담기위한 (4 바이트) 공간을 만든다. 다음 줄은 값 10을 ebp에서 4를 뺀 (4 바이트) 주소에 복사한다. 명령어 movl %ebp, %esp는 스택포인터를 foo 시작시 가졌던 값으로 되돌리고, popl %ebp는 기준포인터 레지스터의 값을 되돌린다. 스택포인터는 이제 foo를 시작하기 전과 같은 값을 가진다. 아래 표는 main 시작과 목록 4의 (main에서 반환을 제외한) 각 명령어 실행후 레지스터 ebp, esp와 3988에서 3999까지 스택 주소의 내용이다. 우리는 main의 첫 명령어 실행전에 ebp는 값 7000, esp는 값 4000을 가지며, 스택 주소 3988에서 3999까지 임의의 값 219986, 1265789, 86이 저장되있다고 가정한다. 또, main에서 call foo 다음에 나오는 명령어의 주소가 30000이라고 가정한다.
         함수로 파라미터를 전달하기위해 스택을 사용할 수 있다. 우리는 함수가 eax 레지스터에 저장한 값이 함수의 반환값이라는 (우리가 사용하는 C 컴파일러의) 규칙을 따른다. 함수를 호출하는 프로그램은 스택에 값을 넣어서 함수에게 파라미터를 전달한다. 목록 5는 sqr이라는 간단한 함수로 이를 설명한다.
         sqr의 첫번째 줄을 주의있게 살펴라. 함수를 부르는 측은 ebx의 내용을 스택에 넣고 명령어 call을 실행한다. 호출시 반환주소를 스택에 넣는다. 그리고 sqr는 스택 최상위에서 4 바이트 떨어진 곳에서 파라미터를 읽을 수 있다.
         목록 6은 C 프로그램과 어셈블리어 함수를 보여준다. 파일 main.c에 C 함수가 있고 sqr.s에 어셈블리어 함수가 있다. cc main.c sqr.s를 입력하여 파일들을 컴파일하고 같이 링크한다.
         반대도 매우 간단하다. 목록 7은 C 함수 print와 이 함수를 호출하는 어셈블리어를 보여준다.
         지역변수의 공간은 스텍포인터를 감소하여 스택에 확보하고, 단순히 스택포인터를 늘려서 할당된 공간을 되돌린다. 그러면 GNU C가 전역변수에 대해서는 어떤 코드를 생성할까? 목록 9가 해답을 준다.
         Libc wrapper는 시스템호출 규칙이 변경되는 경우 프로그램을 보호하고, 커널에 그런 시스템호출이 없는 경우 POSIX 호환 인터페이스를 제공하기위해 만들어졌다. 그러나, 유닉스 커널은 보통 거의 POSIX에 호환한다: 즉 대부분의 libc "시스템콜"의 문법은 실제 커널 시스템호출의 문법과 (반대로도) 정확히 일치한다. 그러나 libc를 버리지않는 이유는 시스템콜 wrapper외에 printf(), malloc() 등 함수도 있기때문이다.
         리눅스 시스템호출은 int 0x80을 통해 한다. 리눅스는 일반적인 유닉스 호출 규칙과 다른 "fastcall" 규칙을 사용한다. 시스템함수 번호는 eax에, 아규먼트는 스택이 아닌 레지스터를 통해 전달한다. 따라서 ebx, ecx, edx, esi, edi, ebp에 아규먼트 6개까지 가능하다. 아규먼트가 더 있다면 간단히 구조체를 첫번째 아규먼트로 넘긴다. 결과는 eax로 반환하고, 스택을 전혀 건드리지 않는다.
         명령어 cc -g fork.c -static으로 프로그램을 컴파일한다. gdb 도구에서 명령어 disassemble fork를 입력한다. fork에 해당하는 어셈블리코드를 볼 수 있다. -static은 GCC의 정적 링커 옵션이다 (manpage 참고). 다른 시스템호출도 테스트해보고 실제 어떻게 함수가 동작하는지 살펴봐라.
         감싸인 함수(nested function)는 다른 함수 ("감싸는 함수(enclosing function") 안에서 정의되며, 다음과 같다:
  • Cpp에서의멤버함수구현메커니즘 . . . . 52 matches
          cout << endl << ":::::: Case 3 - 포인터 NULL로 하고 메소드 호출하기 " << endl;
         :::::: Case 3 - 포인터 NULL로 하고 메소드 호출하기
         ==== Case2 - 포인터 NULL로 하고 메소드 호출하기 ====
          * 첫째로, C++의 클래스와 인스턴스 생성을 알아봅시다.
          * 둘째로, 인스턴스에 귀속된 멤버 함수들을 실행하는 것을 생각해 보겠습니다.
         ==== C++에서 클래스의 선언과 인스턴스의 생성입니다. ====
         여기까지가, class 와 struct 키워드가 하는 동일한 작업입니다. 그리고, class 에는 몇가지 더 생각해야 하는데, 그중 하나가 foo 를 이용해서 어떠한 member 함수를 호출할 수 있는가 입니다.
         그러나, 컴파일러인 우리는 이 정보를 지역 변수이든, new 로 할당이든 컴파일 시간에 인자의 type을 보고 함수 호출 유효성을 확인하고, 적절한 함수 포인터함수 호출하는 부분에 넣어 줄수 있습니다. 그리고 실행할 수 있는데 이 과정을 두번째에서 설명합니다.
         ==== instance 에 귀속된 멤버 함수들을 실행해 봅시다. ====
         자 계속 우리는 컴파일러 입니다. 컴파일러인 우리는 member 함수 호출 부분을 함수의 실행코드를 가리키는 함수 포인터로 모두 교체하였습니다. 그리고 인간으로 돌아옵시다.
         C++ 표준안에서 전역에서 함수 호출과, instance에 귀속된 멤버 함수들의 호출을 가리지 않습니다. 함수 선언과 멤버 함수 선언의 함수 실행 코드는 모두 동일 방법으로 선언되고, 모두 동일한 메커니즘의 함수 포인터를 이용해서 호출합니다.
         '''전역 함수와 동일한 함수 선언의 형태라면 각각의 instance에 어떻게 접근하는가?'''
         라는 함수는 각 instance의 id 라는 인자에 접근합니다.
         그러나 {{{~cpp Foo::sayMyId()}}} 같은 아무런 인자 없는 함수의 실행코드가 함수 선언 영역에 세팅된다면, id 라는 인자에 접근할수 없습니다.
         C++ 에서는 이런 한계를 class 에 귀속된 함수들의 처음 인자로 해당 class 의 포인터를 묵시적으로 선언해서 해결하고 있습니다. 즉,
         라는 함수 실행 코드가 함수 영역에 선언될때 컴파일러가
         라는 형태의 함수로 선언하고, 실행할수 있도록 만듭니다. 그리고, 호출한다면 {{{~cpp Foo*}}} 부분에
         형태로 함수 포인터를 세팅해서 함수 코드를 실행합니다.
          사족. 이러한 사연이 class내에서 static 멤버 함수를 선언하고 instance에서 호출할때 instance 의 멤버 변수에 접근하지 못하는 이유가 됩니다. static 함수로 선언 하면 묵시적으로 pointer 를 세팅하지 않고 함수를 호출합니다.
         이렇게 나옵니다. (C++ 주석 빼고) 위에서 문제시 되는 부분은, 후반의 두가지 {{{~cpp sayHello() 와 sayMyId()}}} 일겁니다. 둘째 설명의 member 함수를 호출하는 메커니즘을 이해했다면
  • HardcoreCppStudy/두번째숙제/CharacteristicOfOOP/변준원 . . . . 50 matches
         프로그램상에서의 캡슐화의 의미는 프로그램 분석자나 설계자가 주어진 문제를 데이타와 함수들의 세부사항들은 개발의 차후단계에서 정의하고, 객체라는 덩어리 단위로 문제에 대해 생각하게 하는 추상화의 수단을 제공하는 데 있다.
         속성 상속이라는 개념 역시 우리의 일상 생활에서 흔히 사용하는 개념을 프로그램으로 표현하기 위한 편리한 수단이다. 어떤 객체의 종류, 즉 클래스는 좀 더 세분화하여 분류할 수가 있는데 이렇게 세분화된 종류나 유형을 subtype 혹은 subclass라고 한다.
         객체지향 프로그래밍에서 "속성 상속"은 새로운 클래스를 정의할 때 모든 것은 처음부터 다 정의하는 것이 아니라 이미 존재하는 유사한 클래스를 바탕으로 하여 필요한 속성만 추가하여 정의하는 경제적인 방법을 의미한다. 이 때 새로이 생기는 클래스를 subclass라 하고 그 바탕이 되는 클래스를 superclass라 한다. 이렇게 하면 클래스들 사이에서 공통으로 가지는 특성, 즉 데이타 구조나 함수들은 중복하여 정의하는 일을 줄일 수 있을 뿐 아니라, 특성을 수정하거나 추가시에 superclass의 정의만 고치면 그 subclass들도 변경된 속성을 자동적으로 상속받게 되므로 매우 편리하다.
         객체 지향 프로그램의 중요한 특징으로 하나의 함수 이름이나 심볼이 여러 목적으로 사용될 수 있는 다형성(Polymorphism)을 들 수 있다. 객체 지향에서의 다형성이란, 복수의 클래스가 하나의 메세지에 대해 각 클래스가 가지고 있는 고유한 방법으로 응답할 수 있는 능력을 말한다. 즉, 별개로 정의된 클래스들이 ㅌ은 이름의 함수를 별도로 가지고 있어 하나의 메세지에 대해 각기 다른 방법으로 그 메세지를 수행할 수 있는 것을 의미한다. 예를 들어, 여러 가지 화일(file)들을 프린트 하는 함수를 생각해 보자. 화일에는 간단한 텍스트 화일(text file), 문서 편집기로 만든 포멧 화일(format file), 그래픽을 포함하는 화일(file with graphics) 등 여러 가지가 있다. 이들 각각의 화일들은 프린트 하는 방법이 모두 다르다, 객체 지향에서는 아래처럼 각 종류의 화일을 별도의 클래스로 정의하고, 각각의 화일 종류별로 Print라는 함수를 화일의 형태에 맞게 구현한다.
         이렇게 생성된 화일 객체들은 모두 Print라는 메세지를 이해하며, 각 화일의 종류에 알맞게 프린트 할 수 있다. 이렇듯 다형성은 같은 이름의 함수를 여러 클래스가 각 클래스에 알맞게 달리 정의하고 같은 이름의 메세지에 응답할 수 있게 해준다.
         정보 은폐란 캡슐속에 쌓여진 항목에 대한 정보를 외부에 감추는 것을 의미한다. 즉, 처리하려는 데이타 구조와 함수에 사용된 알고리즘 들을 외부에서 직접 접근하지 못하도록 하고 캡슐 내부의 함수들만이 접근하게 된다. 객체지향에 관한 서적이나 논문에서 이 두가지 개념이 중요시 소개되는 것은 바로 객체라는 것이 캡슐화와 정보 은폐의 원리를 실제의 프로그래밍 언어에서 실현한 것이기때문이다.
         이 Public Interface는 언어에 따라 표현 양식이 다른데, C++에서는 "public"이란 특별 구문을 두어 "public"란에 들어간 항목들만 외부에 공개된다. Effel이란 언어에서는 "export"라는 란에 지정된 항목들만 외부에 공개된다. 앞에서 정의한 POINT라는 객체 정의를 보면 move와 setcolor의 함수들이 외부에서 관찰될 수 있는 public interface임을 알 수 있다. 여기서 한가지 유의할 점은 move와 setcolor라는 함수들이 외부에 보여져 불리워질 수 있는 함수들이라는 것이며 각 함수가 가지고 있는 코드나 알고리즘까지 보여지는 것은 아니라는 것이다. 한 함수가 외부에 보여지는 부분을 signature라고 하며 하나의 signature는 함수의 이름, 입력 매개변수(input parameter)와 출력 매개변수(output parameter)로 구성되어 있다.
         위에서 살펴볼 캡슐화와 정보 은폐의 이점은 우선 객체 내부의 은폐된 데이타 구조가 변하더라도 주변 객체들에게 영향을 주지 않는다는 것이다. 예로서, 어떤 변수의 구조를 배열(array)구조에서 리스트(list) 구조로 바꾸더라도 프로그램의 다른 부분에 전혀 영향을 미치지 않는다. 또한 어떤 함수에 사용된 알고리즘을 바꾸더라도 signature만 바꾸지 않으면 외부 객체들에게 영향을 주지 않는다. 예를 들어, sorting 함수의 경우 처음 사용된 sequence sorting 알고리즘에서 quick sorting 알고리즘으로 바뀔때 외부에 어떤 영향도 주지 않는다. 이러한 장점을 유지보수 용이성(maintainability) 혹은 확장성(extendability)이라 한다.
         추상 클래스(Abstract Class)
         클래스 중에는 인스턴스(instance)를 만들어 낼 목적이 아니라 subclass들의 공통된 특성을 추출하여 묘사하기 위한 클래스가 있는데, 이를 추상 클래스(Abstract class, Virtual class)라 한다. 변수들을 정의하고 함수중 일부는 완전히 구현하지 않고, Signature만을 정의한 것들이 있다. 이들을 추상 함수(Abstract function)라 부르며, 이들은 후에 subclass를 정의할 때에 그 클래스의 목적에 맞게 완전히 구현된다. 이 때 추상 클래스의 한 subclass가 상속받은 모든 추상 함수들을 완전히 구현했을 때, 이를 완전 클래스(Concrete class)라고 부른다. 이 완전 클래스는 인스턴스를 만들어 낼 수 있다.
         추상 클래스의 예로서 프린터 소프트웨어를 생각해 보자. 우선 모든 종류의 프린터들이 공통으로 가지는 특성을 정의한 추상 클래스 "Printer"가 있다고 한다면, 여기에는 프린터의 상태를 나타내는 변수, 프린터의 속도 등의 변수가 있으며 함수로는 프린팅을 수행하는 Print 등을 생각할 수 있다. 그러나 프린터마다(Dot matrix printer, Laser printer, Ink jet printer) 프린팅 하는 방법이 다르므로 이 추상 클래스 안에서는 Print라는 함수를 완전히 구현할 수 없다. 다만, 여기에는 Print 추상 함수의 Signature만 가지고 있으며, 실제의 구현은 여러 subclass에서 각 프린터 종류에 알맞게 하면 된다.
         "Printer"라는 클래스는 추상 클래스로서 실존의 어떤 프린터 기능을 가지고 있지 않고, dot matrix printer나 laser printer 등의 완전 클래스들 간의 공통된 특성만 지정하고 있으므로, 그 인스턴스를 만드는 것은 무의미하다. 추상 클래스는 점진적 개발 방법(Incremental Development)에 유용하게 사용될 수 있으며, 공통 속성(attribute)의 추출 및 정의에 유용하므로 문제를 모델링하는데 편리함을 더해준다.
  • JavaStudy2003/두번째과제/곽세환 . . . . 49 matches
         행동 -> 메소드(함수)
          클래스(Class):(벽돌틀)
          클래스를 실제로 사용할 수 있도록 선언하는 것
          상위클래스가 가지고 있는 특성들을 하위클래스에서 사용할 수 있다.
          여러개의 클래스가 같은 메시지에 대해서 각자의 방법으로 작용할 수 있는 능력이다.
          연산자 다중 정의(overloading),함수 다중 정의,함수 재정의(overriding)등이 있다.
         나.클래스정의 및 인스턴스(객체) 생성
         클래스 정의
         class 클래스이름 {
         클래스이름 클래스인스턴스이름 = new 클래스이름();
         클래스이름 클래스인스턴스이름;
         클래스인스턴스이름 = new 클래스이름();
         public:같은 클래스, 하위클래스, 같은 패키지내에 있는 클래스에서 접근가능
         private:같은 클래스에서만 접근가능
         protected:같은 클래스, 하위클래스, 같은 패키지내에 있는 클래스에서 접근가능
         friendly(생략):같은 클래스, 같은 패키지내에 있는 클래스에서 접근 가능
         함수다중정의:같은 이름의 함수가 여러개 존재하는 것
         연산자다중정의:같은 이름의 연산자가 클래스에 따라 다른 연산을 수행할 수 있도록 하는 것
         클래스이름(형식매개변수 리스트) { … }
         클래스이름(형식매개변수 리스트) {
  • AcceleratedC++/Chapter14 . . . . 46 matches
         Student_info 클래스는 레코드의 인터페이스. 레코드의 메모리 공간을 관리한다.
         이렇게 2가지의 추상적인 기능을 조합해서 만들게 되는 것은 허술한 클래스 설계때문인 경우가 많다.
         이 장에서는 포인터처럼 동작하지만, 자체 메모리 관리를 포함하는 클래스를 작성하려고 합니다.
         내부의 한 개체를 가리키는 포인터와 비슷한 객체를 적절히 사용하면 불필요한 복사가 행해지는 성능상의 문제를 해결할 수 있다.
         만약 y가 x의 멤버라면 이는 옳다. 그렇지만 어쩌다가 y를 가리키게 된 경우라면 이는 옳지 않다.
         13.3.1절의 첫번째 해결법에선느 이를 위해서 포인터를 사용하여서 Core 혹은 Core로 부터 파생된 객체들을 생성하여 컬렉션 내부의 포인터들로 가리키도록 하였다. 따라서 이 경우 사용자 코드는 객체의 동적생성, 해제에 관련된 것들을 처리할 책임이 있었다.
         '''저수준 자료구조인 포인터를 직접상요함으로서 생기는 문제점'''
         || * 포인터를 복사하는 것은 그 대상 객체를 복사하는 것과는 다름. [[HTML(<BR/>)]] * 포인터의 소멸이 그 객체의 소멸을 의미하지 않는다. (memory leak) [[HTML(<BR/>)]] * 포인터 소멸시키지 않고, 객체를 소멸할경우 dangling pointer 발생. [[HTML(<BR/>)]] * 포인터 생성시 초기화하지 않으면, 포인터를 바인딩되지 않은 상태가된다. ||
         마지막 2가지의 경우는 그 포인터를 다른 곳에서 참조할 경우 어떤 일이 일어날지 알 수 없다.
         13.5의 Student_info 는 프로그래머가 내부의 Core객체를 볼 수없고, 자동으로 메모리 관리가 되도록은 했으나, 메소드들이 Core클래스의 public연산들을 그대로 따르는 것들이 많다.
         이장에서는 이런 핸들(handle)클래스를 일반적인 방식으로 관리하는 것을 알게 된다.
          === 14.1.1 제네릭 핸들 클래스(generic handle class) ===
          이 클래스는 객체의 형에 무관한게 동작하여야 하므로 템플릿으로 작성한다.
          '''Handle 클래스의 요구사항'''
          || * Handle은 객체의 참조값 [[HTML(<BR/>)]] * Handle은 복사가 가능하다 [[HTML(<BR/>)]] * Handle 객체가 다른 객체에 바인딩되어 있는지 확인이 가능 [[HTML(<BR/>)]] * Handle클래스가 가리키는 객체가 상속구조의 클래스형을 가리킨다면 virtual 에 의해 지정된 연산에대해서 다형성을 제공한다. ||
          사용자가 Handle 클래스를 이용해서 특정한 개체에 Handle을 붙이게 되면 Handle은 그 객체의 메모리를 관리하게 된다.
          대신 일단 그 객체는 오직 하나의 Handle만을 부착시켜야 하며, 일단 부착시킨 뒤에는 포인터가아닌 Handle을 이요해서 객체에 접근해야한다.
          Handle(): p(0) { } // 기본생성자는 내부 멤버를 0으로 초기화하여서 아직 바인딩이 안된 상태임을 나타낸다.
          Handle(const Handle& s) : p(0) { if (s.p) p = s.p->clone(); } // 복사 생성자는 인자로 받은 객체의 clone() 함수를 통해서 새로운 객체를 생성하고 그 것을 대입한다.
          -> 연산자는 일견 이항 연산자 처럼 보이지만 동작하는 방식이 다른 연산자들과는 다르다. ->를 호출하게 되면 연산자의 좌측요소에서 포인터를 대신해서 사용이 가능한 요소가 리턴된다.
  • BigBang . . . . 46 matches
          * 기본 함수들의 namespace
          * [http://thenine.egloos.com/430823 main 함수의 리턴값]
         ==== 포인터 (Pointer) ====
         ==== 함수 (Function) ====
          * 함수에 parameter 를 넘겨주지 않거나 return 이 없는 함수도 있음.
          * 많은 기능을 잘게 쪼개기 위해 함수를 사용한다.
          * global variable의 사용을 자제하자. 함수의 기능을 이해하기 어렵게 만든다.
          * 포인터 값을 전달하는 Call-by-reference의 경우는, 포인터 값을 복사의 방식으로 전달하게 되므로, 일종의 call-by-value라고 볼 수 있다.
          * 참조는 내부적으로 포인터를 이용한다.
          * C/C++의 함수 호출 방법(Calling Convention)
          * 함수 decorator : C++의 오버로딩을 하게 되면, 컴파일 타임에서 각각의 함수를 구분할 수 있도록 붙는 머릿말
          * extern "C"를 이용하면 이러한 함수 decorator가 없어진다.
          * const 멤버 함수의 효과
          * int와 객체와의 곱셈을 구현, 남의 멤버함수
          * 신기한 포인터 놀이
          * 참고 : [Cpp에서의멤버함수구현메커니즘]
          * 인스턴스는 NULL를 가리키지만, 실제로 실행될 때는 hello 함수만을 호출하기 때문이다. (문장 설명이 부족한데?)
          * stack이나 heap에서 데이터를 free 할 때, 실제로 포인터만 이동이 된다. 그래서 실제로는 데이터가 메모리에 남아있게 된다(기존의 값을 초기화화 할 필요없이 할당 플래그만 해제하면 되므로). 중간에 다른 곳에서 호출이 될 경우에 데이터가 덮어 써지는 문제가 발생할 수 있으므로, dangling pointer를 조심해야 한다.
          * namespace로 같은 이름을 가진 클래스들을 사용해보자
          * 가변인자의 형을 검사하는 주체가 컴파일러가 아닌, 함수이기 때문이다.
  • JavaNetworkProgramming . . . . 45 matches
          public class AuthException extends IOException{ //사용자 예외를 정의할때 적당한 예외 클래스의 서브클래스가 되는것이 중요한데
          *Thread 클래스 : 보통 상속받아서 사용
          *Runnable 인터페이스 : Thread 클래스를 직접 상속받지 않은 클래스의 객체가 손쉽게 쓰레드를 생성할수 있도록 해줌
          *ThreadGroup 클래스 : 여래개의 쓰레드르 그룹으로 만들어 손쉽계 Thread를 관리
          *OutpuStream,InputStream : 모든 다른 스트림 클래스들의 수퍼클래스이다. 이 Chapter에서는 이둘 클래스 설명
          *OutputStream 클래스 : OutputStream 클래스는 통신 채널로의 관문을 의미한다. 즉, OutputStream으로 데이터를 써넣으면 데이터는 연결된 통신 채널로 전송될 것이다.
          *InputStream 클래스 : InputStream 클래스는 통신 채널로부터 데이터를 읽어 내는 관문을 의미한다. OutputStream에 의해 통신 채널로 쓰여진 데이터는 해당하는 InputStream에 의해 읽혀진다.
          *FileOutputStream과 FileInputStream은 파일에 대한 바이트 기반의 스트림 엑세스를 제공하는 2개의 표준 클래스이다.
          *File클래스 : 시스템에 독립적인 파일의 이름을 나타내고 실제 파일에 관한 정보를 결정하는 메소드뿐만아니라, 파일의 속성을 바꾸는 메소드도 제공
          *FileDescriptor클래스 : FileDescriptor 객체는 하위 레벨의 시스템 파일 설명자로의 핸들이다. 파일 설명자는 열려진 파일을 의미하며, 읽기 작업이나 쓰기 작업을 위한 현재의 파일 내의 위치와 같은 정보들을 포함한다. RandomAccessFile이나 FileOutputStream, FileInputStream을 사용하지 않고는 유용하게 FileDescritor를 생성할수 있는 방법은 없다 . --;
          *RandomAccessFile클래스 : 파일스트림을 사용하지않고 파일을 쉽게 다룰수 있음 장점은 파일스트림 클래스는 순차적 엑세스만이 가능하지만 이것은 임의의 엑세스가 가능하다. 여기선 RandomAccessFile클래스랑 파일 스트림을 같이 쓰는데 RandomAccessFile의 장점을 가지고 네트워크에서도 별다른 수정없이 사용할수있다. 예제는 밑에 --;
          *FileOutputStream 클래스 : 연속적인 데이터가 파일에 쓰여질수 있도록 해줌
          *FileInputStream 클래스 : 연속적인 데이터를 읽을수 있게 해줌 --;
          //않으면 파일을 연다 파일을 열면 포인터는 자동으로 파일의 시작부분을 가리키미로
          file.seek(position); //position의 위치로 파일 포인터 위치를 변경
          return file.getFilePointer(); //현재 파일 포인터 위치를 돌려줌
          *FileterOutputStream , FilterInputStream 클래스 : 이것은 입출력 스트림 필터에 대한 템플리트로 이미 존재하는 InputStream,OutputStream에 연결해서 요구된 내용을 연결된 스트림의 메소드로 전댈해 주는것 이외의 기능은 제공하지 않는다.
          *LineNumberInputStream : LineNumberReader 클래스에 의해 쓸모가 없어진 이 스트림은 초보적인 수준으로 줄에 번호 매기는 기능을 제공한다.
          *PrintStream : PrintWriter 클래스에 의해 쓸모가 없어진 이 클래스는 ASCII 텍스트 데이터의 출력기능을 제공한다.
          *DataOutputStream,DataInputStream,BufferedOutputStream,BufferedInputStream,PrintStream,SequenceInputStream,LineNumberInputStream,PushbackInputStream 클래스에 관해서 좀 자세히 설명을 해놓고 있다.
  • 새싹교실/2012/AClass/3회차 . . . . 45 matches
         6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
         9.포인터를 이용한 예제코드 하나를 짜 보세요.
         10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
         - *a가 b를 가리키는 포인터도 선언 되었다면, &a는 a의 주소값, a는 메모리 안에 있는 값(즉, b의 주소값-포인터의 정의), &b는 b의 주소값, b는 메모리 안에 있는 값(할당한 값),a=&b와 같다. 둘다 b의 주소값을 나타낸다.*a=b와 같고 b에 할당한 값과 같다.
         molloc은 함수가 원하는 역활은 우리가 원하는 크기의 자료를 메모리에 할당하고 그 주소값을 다시 되돌려 주는 역활이다.
         포인터 변수 = (포인터의 자료형 )malloc(원하는 자료크기);
         3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
         - 포인터의 주소를 가리키는 포인터를 이중포인터라고 한다.
         6.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
         9.포인터를 이용한 예제코드 하나를 짜 보세요.
         10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
          printf("%d\n",&a); //포인터 변수 a의 주소
         3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
         이중 포인터는 싱글 포인터의 주소 값을 저장하기 위한 용도로 사용되는 포인터이다.
         7.포인터를 이용해 함수 swap 짜보기(대부분의 책 예제에 있습니다. 따라 써보고 코드를 이해해 보세요)
         10.포인터를 이용한 예제코드 하나를 짜 보세요.
         11.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
         동적 할당에 가장 기번적으로 사용되는 것은 malloc함수이고, 이 함수를 사용하기 위해서는 "stdlib.h"헤더파일을 포함해야 한다
         포인터 변수 = (포인터의 자료형 종류)malloc(원하는 자료크기);
         3.이중포인터가 무엇인지 알아보고, 이중 포인터를 이용해 2차원 배열형태로 만들어보세요.
  • Gof/Composite . . . . 38 matches
         드로우 에디터나 회로설계 시스템과 같은 그래픽 어플리케이션은 단순한 컴포넌트들의 차원을 넘어서 복잡한 도표들을 만들어내는데 이용된다. 사용자는 더 큰 컴포넌트들을 형성하기 위해 컴포넌트들을 그룹화할 수 있고, 더 큰 컴포넌트들을 형성하기 위해 또 그룹화 할 수 있다. 단순한 구현방법으로는 Text 나 Line 같은 그래픽의 기본요소들에 대한 클래스들을 정의한 뒤, 이러한 기본요소들에 대해 컨테이너 역할을 하는 다른 클래스에 추가하는 방법이 있다.
         하지만, 이러한 접근방법에는 문제점이 있다. 비록 대부분의 시간동안 사용자가 개개의 객체들을 동일하게 취급한다 하더라도, 이러한 클래스들을 이용하는 코드는 반드시 기본객체와 컨테이너 객체를 다르게 취급하여 코딩해야 한다는 점이다. 이러한 객체들의 구별은 어플리케이션을 복잡하게 만든다. CompositePattern은 객체들에 대한 재귀적 조합 방법을 서술함으로서, 클라이언트들로 하여금 이러한 구분을 할 필요가 없도록 해준다.
         CompositePattern의 핵심은 기본요소들과 기본요소들의 컨테이너를 둘 다 표현하는 추상 클래스에 있다. 그래픽 시스템에서 여기 Graphic class를 예로 들 수 있겠다. Graphic 은 Draw 와 같은 그래픽 객체들을 구체화하는 명령들을 선언한다. 또한 Graphic 은 Graphic 의 자식클래스들 (tree 구조에서의 parent-child 관계)에 대해 접근하고 관리하는 명령들과 같은 모든 composite 객체들이 공유하는 명령어들을 선언한다.
         Line, Rectangle, Text 와 같은 서브 클래스들은 (앞의 class diagram 참조) 기본 그래픽 객체들을 정의한다. 이러한 클래스들은 각각 선이나 사각형, 텍스트를 그리는 'Draw' operation을 구현한다. 기본적인 그래픽 구성요소들은 자식요소들을 가지지 않으므로, 이 서브 클래스들은 자식요소과 관련된 명령들을 구현하지 않는다.
         Picture 클래스는 Graphic 객체에 대한 포함관계를 정의한다. Picture 는 Picture의 children의 Draw 메소드를 호출하게끔 Draw 메소드를 구현한다. 그리고 Picture는 child와 관련한 명령어들을 알맞게 구현한다. Picture 인터페이스는 Graphic의 인터페이스를 형성하므로, Picture 객체는 다른 Pricture들을 재귀적으로 조합할 수 있다.
          * 모든 클래스들에의 기본적인 인터페이스에 대한 기본 행위를 구현한다.
          * (optional) 재귀 구조에서의 해당 컴포넌트의 부모 클래스로 접근하기 위한 인터페이스를 정의하고, 적절하게 구현한다.
          * 클라이언트들은 Component 클래스의 인터페이스를 이용, composite 구조의 객체들과 상호작용을 한다. 만일 상호작용하는 객체가 Leaf인 경우, 해당 요청은 직접적으로 처리된다. 만일 상호작용하는 객체가 Composite인 경우, Composite는 해당 요청을 자식 컴포넌트들에게 전달하는데, 자식 컴포넌트들에게 해당 요청을 전달하기 전 또는 후에 추가적인 명령들을 수행할 수 있다.
          * 기본 객체들과 복합 객체들로 구성된 클래스 계층 구조를 정의한다. (상속관계가 아님. 여기서는 일종의 data-structure의 관점) 기본 객체들은 더 복잡한 객체들을 구성할 수 있고, 계속적이고 재귀적으로 조합될 수 있다. 클라이언트 코드가 기본 객체를 원할때 어디서든지 복합 객체를 취할 수 있다.
          * 클라이언트를 단순하게 만든다. 클라이언트는 각각의 객체와 복합 구조체를 동등하게 취급할 수 있다. 클라이언트는 그들이 다루려는 객체가 Composite 인지 Leaf 인지 알 필요가 없다. 이러함은 composition 을 정의하는 클래스들에 대해 상관없이 함수들을 단순하게 해준다.
          * 새로운 종류의 컴포넌트들을 추가하기 쉽게 해준다. 새로 정의된 Composite 나 Leaf 의 서브클래스들은 자동적으로 현재의 구조들과 클라이언트 코드들과 작용한다. 클라이언트 코드들은 새로운 Component 클래스들에 대해서 수정될 필요가 없다.
         Equipment 클래스는 부분-전체 계층구조의 모든 equipment들을 위한 인터페이스를 정의한다.
         Equipment 는 전원소모량 (power consumption)과 가격(cost) 등과 같은 equipment의 일부의 속성들을 리턴하는 명령들을 선언한다. 서브클래스들은 해당 장비의 구체적 종류에 따라 이 명령들을 구현한다. Equipment 는 또한 Equipment의 일부를 접근할 수 있는 Iterator 를 리턴하는 CreateIterator 명령을 선언한다. 이 명령의 기본적인 구현부는 비어있는 집합에 대한 NullIterator 를 리턴한다.
         Equipment 의 서브클래스는 디스크 드라이브나 IC 회로, 스위치 등을 표현하는 Leaf 클래스를 포함할 수 있다.
         CompositeEquipment 는 다른 equipment를 포함하는 equipment의 기본클래스이다. 이는 또한 Equipment 의 서브클래스이다.
         CompositeEquipment 는 sub-equipment 에 접근하고 관리하기 위한 명령들을 정의한다. 이 명령들인 Add 와 Remove는 _equipment 멤버에 저장된 equipment 의 리스트로부터 equipment 를 추가하거나 삭제한다. CreateIterator 명령은 이 리스트들을 탐색할 수 있는 iterator(구체적으로 ListIterator의 인스턴스) 를 리턴한다.
         자, 우리는 컴퓨터 섀시를 Chassis 라 불리는 CompositeEquipment의 서브클래스로서 표현할 수 있다. Chassis는 CompositeEquipment로부터 자식-관련 명령어들을 상속받는다.
         CompositePattern의 예는 거의 모든 객체지향 시스템에서 찾을 수 있다. Smalltalk 의 Model/View/Container [KP88] 의 original View 클래스는 Composite이며, ET++ (VObjects [WGM88]) 이나 InterViews (Styles [LCI+92], Graphics [VL88], Glyphs [CL90])등 거의 대부분의 유저 인터페이스 툴킷과 프레임워크가 해당 과정을 따른다. Model/View/Controller 의 original View에서 주목할만한 점은 subview 의 집합을 가진다는 것이다. 다시 말하면, View는 Component class 이자 Composite class 이다. Smalltalk-80 의 Release 4.0 은 View 와 CompositeView 의 서브클래스를 가지는 VisualComponent 클래스로 Model/View/Controller 를 변경했다.
         RTL Smalltalk 컴파일러 프레임워크 [JML92] 는 CompositePattern을 널리 사용한다. RTLExpression 은 parse tree를 위한 Component 클래스이다. RTLExpression 은 BinaryExpression 과 같은 서브클래스를 가지는데, 이는 RTLExpression 객체들을 자식으로 포함한다. 이 클래스들은 parse tree를 위해 composite 구조를 정의한다. RegisterTransfer 는 프로그램의 Single Static Assignment(SSA) 형태의 중간물을 위한 Component 클래스이다. RegisterTransfer 의 Leaf 서브클래스들은 다음과 같은 다른 형태의 static assignment 를 정의한다.
         또 다른 서브클래스로서 RegisterTransferSet이 있다. RegisterTransferSet 는 한번에 여러 register를 변경하는 assignment를 표현하기 위한 Composite 클래스이다.
  • JavaStudy2004/오버로딩과오버라이딩 . . . . 38 matches
          기반 클래스에 이미 존재하는 함수를 파생 클래스에서 다시 선언하고, 구현하는 것을 함수를 재정의(Overriding)한다고 한다. 기반 클래스에 이미 존재하는 함수를 파생 클래스에서 재정의 하면, 파생 클래스에서는 기반 클래스에서 정의된 함수가 무시되고, 파생 클래스에 새로 정의된 함수가 동작하게 된다.
          예를 들어 People클래스에 move(int aX, int aY){this.position.x += aX;this.position.y += aY;}라는 함수가 있다. 그리고 People클래스를 상속 받은 Student이라는 클래스가 있다. 근데 '학생'은 좀 멍청해서 반대로 움직인다. 그렇다면 상속받은 move함수를 재정의 해줘야한다. move(int aX, int aY){this.position.x -= aX;this.position.y -= aY;}
          함수를 재정의 할 때는 기반 클래스에 만들어져 있는 함수와 파생 클래스에서 재정의한 함수함수명과 매개변수의 타입이 완전히 같아서 서로 구별할 수 없어야 한다. 만약, 재정의 하려고 함수를 만들었는데 이것이 기반 클래스에 있는 함수와 매개변수의 타입이 조금이라도 다르면, 이것은 재정의가 아니라 오버로딩으로 간주된다.
          오버로딩이란 하나의 함수명에 비슷한 기능을 하면서 넘겨 받는 매개변수가 서로 다른 함수를 두개 이상 정의하는 것을 말한다.
          위에서 말한 People클래스의 move함수를 예를 들어보겠다. 위의 move함수는 정수형 인자를 매개변수로 받아들인다. 만약 people.move(1.1, 2.13)라는 명령어를 실행한다면 매개변수의 타입이 다르다는 에러가 발생할 것이다. 더블 형의 인자를 받아들이기 위해 move함수를 Overloading한다. move(double aX, double aY){this.position.x += (int)aX;this.position.y += (int)aY;} 두 함수 다 유효한 함수로 사용된다. 두 함수 중 어떤 함수가 호출될 것인지는 매개변수 값에 의해서 결정된다. 즉 오버로딩 된 함수들은 반드시 매개변수의 타입이 달라 서로 구별될 수 있어야 한다.
         people.move(5.1,11.8);//Overloading된 함수 호출, 이동 후 위치(115, 121)
  • 5인용C++스터디/소켓프로그래밍 . . . . 36 matches
          기초 클래스가 CAsyncSocket인 새로운 클래스 CListenSock, CChildSock을 새로 생성한다.
          새로 추가된 두개의 클래스를 다음과 같이 편집한다.
          [클래스위저드]의 CListenSock에 가상 함수 OnAccept()를 추가한 후 다음 라인을 삽입한다.
          [클래스위저드]의 CChildSock에 가상 함수 OnReceive()와 OnClose()를 추가한 후 다음 코드를 삽입한다.
          어플리케이션 클래스에 다음의 멤버변수와 함수 원형을 선언한다.
          어플리케이션 클래스의 생성자에서 추가한 멤버변수를 초기화한다.
          그리고 나서 추가한 멤버함수를 다음과 같이 정의한다.
          다음으로 데이터 송수신 작업을 하는 함수를 추가한다. 그 다음, 데이터 송수신 후 마무리 작업을 한다.
          다이얼로그가 초기화될 때 서버로 작동하도록 CServerDlg 클래스의 OnInit Dialog()함수에 다음 코드를 삽입한다.
          그리고 나서 [클래스위저드]의 CServerDlg에 IDC_SEND를 맵핑한 후 다음 코드를 추가한다.
          서버와 동일한 방법으로 클라이언트 프로그램에서 사용할 소켓 클래스 CClientSock을 생성(기초 클래스: CAsyncSocket)한다. 그리고 나서 [클래스위저드]의 CClientSock에 가상함수 OnReceive()와 OnClose()를 추가한 후, 다음 코드를 삽입한다.
          [클래스위저드]를 실행하여 CConnectDlg 클래스를 새로 생성한 후 CConnectDlg 클래스에 다음 변수를 추가한다.
          그리고 [클래스위저드]의 CConnectDlg에 IDOK를 맵핑하여 사용자가 입력한 IP 주소를 멤버변수 m_strAddress에 저장한다.
          어플리케이션 클래스에 다음과 같이 멤버변수와 함수 원형을 선언한다.
         어플리케이션 클래스의 생성자에서 추가한 멤버변수를 초기화한다.
         그리고 나서 추가한 멤버함수를 다음과 같이 정의한다.
          [클래스위저드]의 CClientDlg에 IDC_CONNECT을 맵핑한 후 다음 코드를 삽입한다.
          [클래스위저드]의 CClientDlg에 IDC_SEND를 맵핑한 후 다음 코드를 삽입한다.
  • 2학기파이선스터디/함수 . . . . 35 matches
         == 함수의 정의와 호출 ==
         def 함수명(인수들..):
         return은 계산된 값을 함수를 호출한 곳으로 돌려준다. def는 함수 객체를 생성하고 그 객체를
         add란 이름에 할당한다. 즉, 이름 add는 함수 객체의 reference를 갖고 있다.
         add는 함수 객체를 참조하는 이름에 불과하므로 다른 이름을 이용해 함수를 호출할 수도 있다.
         pass는 아무 일도 하지 않는 통과문(statement)이다. 함수는 최소한 한 개 이상의 문을 가져야 하기 때문에 사용한다.
         인수 없이 return문 만을 사용하면 함수 호출측에 아무 값도 전달하지 않는다.
          * 지역 영역(local scope) - 함수
         g, h는 함수 외부에서 정의되었으므로 전역, a,b는 함수 내부에서만 사용되는 지역 변수이다.
         h는 전역에 있지만 함수 내부에서 생성하므로 함수 내부에서는 지역 변수 h를,
         함수 외부에서는 전역 변수 h를 참조한다.
         함수 f의 지역 이름들은 함수 f가 종료되면서 사라진다(이름 공간 자체가 사라진다).
         함수 f내부의 h를 전역변수로 사용하려면(즉, 전역변수h의 값을 바꾸고자한다면)
          x = 1 # 함수 G 안에서 여기는 local도 global도 아니다
         함수 G에서 참조하는 x는 지역(함수 G안), 전역(모듈), 내장 영역만 찾게 되므로 함수 F에 정의된 x가 참조되지 않는다.(x = 2)
         그러나 2.1이상에서는 함수 F 안의 x를 참조하므로 올바른 결과가 나온다.
         == 함수 인수 ==
         고정되지 않은 수의 인수를 함수에 전달 - 나머지는 모두 튜플 형식으로 받는다
         미리 정의되어 있지 않은 키워드 인수를 받으려면 함수 정의할때 마지막에 **kw형식으로 기술한다.
         === 튜플 인수와 사전 인수로 함수 호출하기(2.0 이상) ===
  • 타도코코아CppStudy/0724/선희발표_객체지향 . . . . 35 matches
          * Classification(분류) - 같은 자료구조와 행위를 가진 객체들은 동일한 클래스(class)로 분류된다.
          상대적으로 각 객체는 소속 클래스의 인스턴스(instance)가 된다.
          같은 클래스에서 생성된 객체들은 모두 같은 연산(operation) 기능을 갖고 있으며, 자료구조가 같고 동일한 행위를 하게 된다.(자료구조는 객체들이 갖는 데이타와 속성(attribute)들의 집합이다. 그러나 데이터와 속성의 값은 물론 다르다.)
          * Polymorphism(다형성) - 같은 연산 기능이 부여되어도 그 기능을 수행하는 클래스에 따라 다른 행위로 나타날 수 있다.
          예를 들어 '이동(move)' 이라는 기능이 '교수'라는 클래스에 적용될 때는 자택의 이사가 될 수 있으나, '승용차'라는 클래스에 적용되면 특정 목적지로 일정한 시각에 정해진 속도로 움직이는 행위가 될 수도 있다.
          * Inheritance(상속) - 계층(hierarchy)관계에 놓여 있는 클래스들 간에 속성이나 연산 기능들을 공유한다.
          즉, 주어진 클래스에 서브클래스(subclass)가 있다면 서브클래스의 모든 객체들은 소속 클래스의 모든 속성이나 연산기능을 상속받게 된다. 따라서, 서브클래스를 정의할 때에는 수퍼클래스(super class) 로부터 상속받는 내역들을 중복하여 정의할 필요가 없게 된다.
         || 함수로 이루어짐 || 클래스로 이루어짐 ||
          * 캡슐화(encapsulation) : 객체의 내부적인 사항과 객체들간의 외부적인 사항들을 분리시킨다. 이렇게 캡슐화된 객체의 행위는 외부에서 볼 때는 구체적인 아닌 추상적인 것이 되므로 정보 은닉(information hiding) 개념이 존중된다. 주어진 클래스의 특정 연산 기능은 메소드(method)라고 한다. 캡슐화는 무슨 메소드로 구현되었는가에 구애받지 않고 추상적으로 정의된 연산 기능을 통해 객체가 사용되고 시스템의 상태(state)를 변화시키도록 해준다.
          * sharing : 자료 구조및 행위의 공유화(sharing)는 계층 관계에 놓여 있는 클래스들 간의 상속성(inheritance)으로 가능하다.
          서브클래스가 수퍼클래스의 변수와 메소드들을 상속받을 때 필요에 따라 정의가 구체화(specification)되며, 상대적으로 상위층의 클래스 일수록 일반화(generalization) 된다고 말한다.
          * 캡슐화(Capsulation) : 캡슐화는 객체의 속에 모든 함수와 그 함수에 의해 유통되는 데이타를 밖에서 유통시키지 않는것이다.
          겉에서 그객체를 사용하기 위한 사용자 인터페이스는 제공하나 데이타를 검색, 수정 그리고 함수의 이용을 위해서는 이 인터페이스를 꼭 거쳐야 되게 하는것이다.
          즉 함수나 데이터가 그것이 속해있는 객체전용으로 된다는것을 말한다. 좋은 예로 자동차를 들수있다.
          자동차라는 객체 클래스를 우리가 사용하기 위해서는 알아야할 것이 운전하는 방법뿐인 것이다. 표지 판이나 교통신호등은 관계는 있으나 자동차를 움직이기 위한 객체 인터페이스와는 아무런 관계가 없는것이다. 캡슐화는 기능의 조직성과 논리성을 연관시킨다.
          * 데이타형 클래스와 객체(Class and Objectas any type data) : 자동차를 움직이기 위한 유저가 2명 있다. 자동차라는 객체 를 둘다 사용하는데 한명은 부산에 가려고 하고 한명은 대구에 오려고 한다.
          * 상속성(Inheritance) : 객체를 이루는 클래스를 만들때 이전의 정의했던 클래스와 비슷하나 다른 특이한 특성을 지니는 클래스를 만드는것이다.
          또 자동차다. 가진 자동차의 엔진이 출력이 150마력이다. 여기다 똑같은 엔진을 하나더 달아 300마력이 되었다. 즉 앞의 150마력이라는 클래스에 두개로서 300마력을 만든다는 개념이 포함 즉 상속되어있는것이다. 엔진력의 향상이 손쉽게 이루어졌다. 만약 새 300마력엔진을 단 차를 산다고 하면 더 힘들것이라는것을 알것이다.
          150마력짜리 엔진을 두개 단차와 300마력짜리 엔진을 하나 단 차나 두차의 출력은 같다. 이것이 다형이다. 즉 클래스가 같다는 뜻이다. 조상객체로 볼때는 분명히 같은 이름이지만( 출력이 300마력이다) 전혀 실행방법이 다른 클래스인것이다( 하나는 150마력엔진의 원리로 움직이고 하나는 300마력 엔진의 원리로 움직인다는것).
          다형은 기본 클래스를 바탕으로 동일한 메모리 개념을 써 다양성을 부여하는 것이다.
  • 타도코코아CppStudy/객체지향발표 . . . . 35 matches
          * Classification(분류) - 같은 자료구조와 행위를 가진 객체들은 동일한 클래스(class)로 분류된다.
          상대적으로 각 객체는 소속 클래스의 인스턴스(instance)가 된다.
          같은 클래스에서 생성된 객체들은 모두 같은 연산(operation) 기능을 갖고 있으며, 자료구조가 같고 동일한 행위를 하게 된다.(자료구조는 객체들이 갖는 데이타와 속성(attribute)들의 집합이다. 그러나 데이터와 속성의 값은 물론 다르다.)
          * Polymorphism(다형성) - 같은 연산 기능이 부여되어도 그 기능을 수행하는 클래스에 따라 다른 행위로 나타날 수 있다.
          예를 들어 '이동(move)' 이라는 기능이 '교수'라는 클래스에 적용될 때는 자택의 이사가 될 수 있으나, '승용차'라는 클래스에 적용되면 특정 목적지로 일정한 시각에 정해진 속도로 움직이는 행위가 될 수도 있다.
          * Inheritance(상속) - 계층(hierarchy)관계에 놓여 있는 클래스들 간에 속성이나 연산 기능들을 공유한다.
          즉, 주어진 클래스에 서브클래스(subclass)가 있다면 서브클래스의 모든 객체들은 소속 클래스의 모든 속성이나 연산기능을 상속받게 된다. 따라서, 서브클래스를 정의할 때에는 수퍼클래스(super class) 로부터 상속받는 내역들을 중복하여 정의할 필요가 없게 된다.
         || 함수로 이루어짐 || 클래스로 이루어짐 ||
          * 캡슐화(encapsulation) : 객체의 내부적인 사항과 객체들간의 외부적인 사항들을 분리시킨다. 이렇게 캡슐화된 객체의 행위는 외부에서 볼 때는 구체적인 아닌 추상적인 것이 되므로 정보 은닉(information hiding) 개념이 존중된다. 주어진 클래스의 특정 연산 기능은 메소드(method)라고 한다. 캡슐화는 무슨 메소드로 구현되었는가에 구애받지 않고 추상적으로 정의된 연산 기능을 통해 객체가 사용되고 시스템의 상태(state)를 변화시키도록 해준다.
          * sharing : 자료 구조및 행위의 공유화(sharing)는 계층 관계에 놓여 있는 클래스들 간의 상속성(inheritance)으로 가능하다.
          서브클래스가 수퍼클래스의 변수와 메소드들을 상속받을 때 필요에 따라 정의가 구체화(specification)되며, 상대적으로 상위층의 클래스 일수록 일반화(generalization) 된다고 말한다.
          * 캡슐화(Capsulation) : 캡슐화는 객체의 속에 모든 함수와 그 함수에 의해 유통되는 데이타를 밖에서 유통시키지 않는것이다.
          겉에서 그객체를 사용하기 위한 사용자 인터페이스는 제공하나 데이타를 검색, 수정 그리고 함수의 이용을 위해서는 이 인터페이스를 꼭 거쳐야 되게 하는것이다.
          즉 함수나 데이터가 그것이 속해있는 객체전용으로 된다는것을 말한다. 좋은 예로 자동차를 들수있다.
          자동차라는 객체 클래스를 우리가 사용하기 위해서는 알아야할 것이 운전하는 방법뿐인 것이다. 표지 판이나 교통신호등은 관계는 있으나 자동차를 움직이기 위한 객체 인터페이스와는 아무런 관계가 없는것이다. 캡슐화는 기능의 조직성과 논리성을 연관시킨다.
          * 데이타형 클래스와 객체(Class and Objectas any type data) : 자동차를 움직이기 위한 유저가 2명 있다. 자동차라는 객체 를 둘다 사용하는데 한명은 부산에 가려고 하고 한명은 대구에 오려고 한다.
          * 상속성(Inheritance) : 객체를 이루는 클래스를 만들때 이전의 정의했던 클래스와 비슷하나 다른 특이한 특성을 지니는 클래스를 만드는것이다.
          또 자동차다. 가진 자동차의 엔진이 출력이 150마력이다. 여기다 똑같은 엔진을 하나더 달아 300마력이 되었다. 즉 앞의 150마력이라는 클래스에 두개로서 300마력을 만든다는 개념이 포함 즉 상속되어있는것이다. 엔진력의 향상이 손쉽게 이루어졌다. 만약 새 300마력엔진을 단 차를 산다고 하면 더 힘들것이라는것을 알것이다.
          150마력짜리 엔진을 두개 단차와 300마력짜리 엔진을 하나 단 차나 두차의 출력은 같다. 이것이 다형이다. 즉 클래스가 같다는 뜻이다. 조상객체로 볼때는 분명히 같은 이름이지만( 출력이 300마력이다) 전혀 실행방법이 다른 클래스인것이다( 하나는 150마력엔진의 원리로 움직이고 하나는 300마력 엔진의 원리로 움직인다는것).
          다형은 기본 클래스를 바탕으로 동일한 메모리 개념을 써 다양성을 부여하는 것이다.
  • 1002/Journal . . . . 34 matches
          * 쌓아나가야 할 부분이 상당히 많아보이는데.. Refactoring 에서의 경험을 어설프게 가로질러본다면. ReFactoring 을 할때 나쁜 클래스들을 그 안에서 계속 고쳐나가는 것 보단, 새 클래스나 메소드들을 중간에 만든뒤, 나쁜 클래스들을 삭제하는게 더 빠른 방법이다. 좋은 습관을 만들어내는 것이 나쁜 습관을 고쳐내려고 하는것보다 최종적으로 볼땐 더 접근하기 쉽지 않을까 하는 생각을 해본다. 나쁜 점이라 생각하는것은, 의식화해서 고치는 것 보단 좋은 습관으로 대체하고 나쁜 습관을 아에 잊어버리게끔 하는것이 더 나은것 같다.
         연습장에 전체 클래스들 구조를 그려봤다. CRC 를 쓸까 하다가 늘어놓을 자리가 없어서..;
         상단의 클래스들은 하단의 클래스들을 이용하는 식이다.
         그림을 보고 나니, Inheritance 나 Delegation 이 필요없이 이루어진 부분이 있다는 점 (KeywordGenerator 클래스나 BookSearcher, HttpSpider 등) Information Hiding 이 제대로 지켜지지 않은것 같다는 점, (Book 과 관련된 데이터를 얻고, 검색하여 리스트를 만들어내는 것은 BookMapper 에서 통일되게 이루어져야 한다.) 레이어를 침범한것 (각각의 Service 클래스들이 해당 로직객체를 직접 이용하는것은 그리 보기 좋은 모양새가 아닌듯 하다. 클래스 관계가 복잡해지니까. 그리고 지금 Service 가 서블릿에 비종속적인 Command Pattern 은 아니다. 그리고 AdvancedSearchService 와 SimpleSearchService 가 BookMapper 에 촛점을 맞추지 않고 Searcher 클래스들을 이용한 것은 현명한 선택이 아니다.)
         구조를 살피면서 리팩토링, KeywordGenerator 클래스와 HttpSpider 등의 클래스들을 삭제했다. 테스트 96개는 아직 잘 돌아가는중. 리팩토링중 inline class 나 inline method , extract method 나 extract class 를 할때, 일단 해당 소스를 복사해서 새 클래스를 만들거나 메소드를 만들고, 이를 이용한뒤, 기존의 메소드들은 Find Usage 기능을 이용하면서 이용하는 부분이 없을때까지 replace 하는 식으로 했는데, 테스트 코드도 계속 녹색바를 유지하면서, 작은 리듬을 유지할 수 있어서 기분이 좋았다.
         기존의 AcceptanceTest 들이 작동을 못한다. (Python 에서 정규표현식 이용. 데이터 파싱 & 추출. Prometheus UI 가 바뀌면 다시 바뀜) 전에 구경한 것처럼 XPath 를 이용하는 방법을 궁리해보거나, Prometheus 쪽에서 XML + XSLT 를 이용하는 방법을 궁리했다. 하지만, 그러기엔 현재 Prometheus 의 JSP 부분을 전부 바꾸는데 부담이 크리라 판단, Servlet Controller 중 Service 클래스 부분에 대해 테스트 코드를 붙이는 방법을 생각해 냈다. 하지만, 막상 작성해보고 나니 그 또한 테스트 코드의 크기가 크긴 하다.
         테스트 코드 작성을 위한 일부 코드 복사 & 메소드 추가 & 클래스 추가.
         Refactoring Catalog 정독. 왜 리팩토링 책의 절반이 리팩토링의 절차인지에 대해 혼자서 감동중.; 왜 Extract Method 를 할때 '메소드를 새로 만든다' 가 먼저인지. Extract Class 를 할때 '새 클래스를 정의한다'가 먼저인지. (절대로 '소스 일부를 잘라낸다'나 '소스 일부를 comment out 한다' 가 먼저가 아니라는 것.)
         이전에 TDD 할때 초기 Library 클래스에 대해 Mock 클래스 만들었다가 없애버렸는데, 다시 Library Mock 클래스를 만들어야 할 것 같다. 리팩토링 할때 Fail 난 테스트로 리팩토링을 할 수는 없을테니.
         이전에 Delegation 하는 클래스를 해당 클래스 내에 멤버로 두었는데. 예를 들면 이런식으로
         해당 클래스 내에서 생성하는 디자인은 그 클래스를 교체해줄 수가 없으니 유연한 디자인이 아니다. 그렇다고 setter 를 두는 것도 좋은 디자인은 아닌것 같고. (프로그래밍 실행 중간에 Delegation 하는 객체를 교체할 일은 드물다. State Pattern 이나 Strategy Pattern 이 아닌이상.) 아마 처음에 Mock Object 를 이용하여 BookMapper 를 만들었었다면 Connection 을 직접 이용하거나, Library 객체를 내부적으로 직접 인스턴스를 생성하여 이용하는 디자인은 하지 않았을 것이란 생각이 든다.
          ''psyco는 가장 바깥쪽 함수, 클래스만 바인딩해주면 해당 코드가 호출하는 다른 코드들은 직접 알아서 다 바인딩 해준다. 즉, main이라는 함수가 있다면 그것만 바인딩하면 프로그램 내의 모든 코드가 바인딩 되는 셈. --JuNe''
          * 만일 영어권에서 살았던 사람이라면 더 빨리 만들었을텐데. 일상 쓰는 단어나 프로그래밍때의 함수 이름이나 똑같이 지을테니. 흐음. 히구;
         음.. 그러고 보니 나는 왜 OOP를 하는거지? 개인적으로 처음 클래스를 구현하면서 찾아낸 장점은 다음이였다.
          1. Visual C++ 에서 클래스로 만들어쓰면 인텔리센스 기능 지원을 받아서 프로그래밍 하기 편하다는.
          * DesignPatterns 연습차 간단하게 그림판을 구현해봄. 처음 간단하게 전부 MainFrame class 에 다 구현하고, 그 다음 Delegation 으로 점차 다른 클래스들에게 역할을 이양해주는 방법을 써 보았다. 그러던 중 MFC에서의 WinApp 처럼 Application class 를 ["SingletonPattern"] 스타일로 밖으로 뺐었는데, 계속 Stack Overflow 에러가 나는 것이였다. '어라? 어딘가 계속 재귀호출이 되나?..'
         즉, Application Class 의 인스턴스가 만들어지기 위해선 MainFrame 클래스가 완성되어야 한다. 그런데, MainFrame 에서는 Application 의 인스턴스를 요구한다. 그렇기 때문에 Application의 getInstance를 호출하고, 아직 인스턴스가 만들어지지 않았으므로 또 getInstance 에선 Application 의 Class 를 새로 또 만들려고 하고 다시 MainFrame 클래스를 생성하려 하고.. 이를 반복하게 되는 것이였다.
         Class 의 역할들을 Delegation 으로 다른 클래스들에게 위임시켜주면서 썼던 패턴이 대강 이랬던 것 같다.
  • MFCStudy_2001/MMTimer . . . . 34 matches
          멀티미디어 타이머에 관련된 함수는 여러가지이나, 타이머를 구현하는데 필요한 함수는 세개입니다. [[BR]]
         타이머를 발동시키는 함수입니다.[[BR]]
          * lpTimeProc : CALLBACK함수의 이름을 넣습니다.
          * dwUser : CALLBACK함수에 전달할 인자를 넣습니다.
          * TIME_ONESHOT : CALLBACK함수가 딱 한번만 실행됩니다.
          * TIME_PERIODIC : uDelay시간이 지날 때마다 CALLBACK함수가 실행됩니다.
         타이머로 불러내어 직접 실행되는 함수부분입니다[[BR]]
          * dwUser : timeSetEvent 함수의 dwUser값이 넘어옵니다.
          * 이것은 콜백 함수라서 전역 변수로 해야된다네요. 굳이 클래스 안에 넣고 싶다면 static으로 선언해야 합니다.
          CALLBACK 함수를 전역으로 선언한 경우
          * 콜백 함수를 정의한것입니다. 콜백 함수내에서는 복잡한 일은 하지 않는게 정신건강에 좋다고 합니다.[[BR]]
          // 메인 윈도우의 포인터를 얻어와서
          CALLBACK 함수클래스 함수로 선언한 경우[[BR]]
          클래스 선언시 timeproc함수는 static 으로 선언해야 합니다.
          * CALLBACK 함수클래스 내에서 선언 될 경우에는 static으로 선언 되어야합니다.
          * this는 이 클래스 인스턴스의 값을 넘겨줍니다. 클래스 내부 함수로 선언했을 경우네는 중요한 인자값입니다.
          pDlg를 통해서 원래 클래스의 모든 메소드와 변수를 사용할 수 있습니다.
          * CALLBACK 함수를 사용할때의 주의점. (in MSDN)[[BR]]
          - 어플리케이션은 콜백 함수 내부로부터 다음 함수를 제외하고는 시스템 정의 함수를 부를 수가 없다. : PostMessage, timeGetSystemTime, timeGetTime, timeSetEvent, timeKillEvent, midiOutShortMsg, midiOutLongMsg, and OutputDebugString.[[BR]]
          왠만한 함수들은 Callback함수 내에서 부르면 안됩니다.
  • Gof/Facade . . . . 33 matches
         예를 들기 위해, 어플리케이션에게 컴파일러 서브시스템을 제공해주는 프로그래밍 환경이 있다고 하자. 이 서브시스템은 컴파일러를 구현하는 Scanner, Parser, ProgramNode, BytecodeStream, 그리고 ProgramNodeBuilder 클래스를 포함하고 있다. 몇몇 특수화된 어플리케이션은 이러한 클래스들을 직접적으로 접근할 필요가 있을 것이다. 하지만, 대부분의 컴파일러 시스템을 이용하는 클라이언트들은 일반적으로 구문분석(Parsing)이나 코드 변환 (Code generation) 의 세부적인 부분에 대해 신경쓸 필요가 없다.(그들은 단지 약간의 코드를 컴파일하기 원할뿐이지 다른 강력한 기능을 알 필요가 없다.) 그러한 클라이언트들에게는 컴파일러 서브시스템의 강력하지만 저급레벨인 인터페이스는 단지 그들의 작업을 복잡하게 만들 뿐이다.
         이러한 클래스들로부터 클라이언트들을 보호할 수 있는 고급레벨의 인터페이스를 제공하기 위해 컴파일러 서브시스템은 facade 로서 Compiler class를 포함한다. 이러한 클래스는 컴파일러의 각 기능성들에 대한 단일한 인터페이스를 정의한다. Compiler class는 facade (원래의 단어 뜻은 건물의 전면. 외관, 겉보기..) 로서 작용한다. Compiler class는 클라이언트들에게 컴파일러 서브시스템에 대한 단일하고 단순한 인터페이스를 제공한다. Compiler class는 컴파일러의 각 기능들을 구현한 클래스들을 완벽하게 은폐시키지 않고, 하나의 클래스에 포함시켜서 붙인다. 컴파일러 facade 는저급레벨의 기능들의 은폐없이 대부분의 프로그래머들에게 편리성을 제공한다.
          * 복잡한 서브 시스템에 대해 단순한 인터페이스를 제공하기 원할때. 서브시스템은 종종 시스템들이 발전되어나가면서 더욱 복잡성을 띄게 된다. 대부분의 패턴들은 패턴이 적용된 결과로 많고 작은 클래스들이 되게 한다. 패턴의 적용은 서브시스템들이 더 재사용가능하고 커스터마이즈하기 쉽게 하지만, 커스터마이즈할 필요가 없는 클라이언트들이 사용하기 어렵게 만든다. Facade는 서브시스템에 대한 단순하고 기본적인 시각을 제공한다. 이러한 시각은 대부분의 클라이언트들에게 충분하다. 커스터마이즈가 필요한 클라이언트들에게만이 facade를 넘어서 볼 필요가 있는 것이다.
          * 클라이언트들과 추상 클래스들의 구현 사이에는 많은 의존성이 있다. 클라이언트와 서브시스템 사이를 분리시키기 위해 facade를 도입하라. 그러함으로서 서브클래스의 독립성과 Portability를 증진시킨다.
          - 각 서브시스템 클래스는 각 요청에 대한 책임이 있다.
          3. 그러하면서도 어플리케이션은 여전히 서스시스템 클래스들을 사용할 방법을 제공한다. 사용의 편리성과 일반성을 선택할 수 있다.
         클라이언트와 서브시스템간의 연결관계는 Facade를 추상클래스로 만듬으로서 줄일 수 있다.
         그러면 클라이언트는 추상 Facade class의 인터페이스를 통해 서브시스템과 대화할 수 있다. 이러한 추상클래스와의 연결은 클라이언트가 사용할 서브시스템의 구현을 알아야 하는 필요성을 없애준다.
         2. public vs private 서브시스템 클래스.
         서브시스템은 인터페이스를 가진다는 점과 무엇인가를 (클래스는 state와 operation을 캡슐화하는 반면, 서브시스템은 classes를 캡슐화한다.) 캡슐화한다는 점에서 class 와 비슷하다. class 에서 public 과 private interface를 생각하듯이 우리는 서브시스템에서 public 과 private interface 에 대해 생각할 수 있다.
         서브시스템으로의 public interface는 모든 클라이언트들이 접속가능한 클래스들로 구성되며. 이때 서브시스템으로의 private interface는 단지 서브시스템의 확장자들을 위한 인터페이스이다. 따라서 facade class는 public interface의 일부이다. 하지만, 유일한 일부인 것은 아니다. 다른 서브시스템 클래스들 역시 대게 public interface이다. 예를 들자면, 컴파일러 서브시스템의 Parser class나 Scanner class들은 public interface의 일부이다.
         서브시스템 클래스를 private 로 만드는 것은 유용하지만, 일부의 OOP Language가 지원한다. C++과 Smalltalk 는 전통적으로 class에 대한 namespace를 global하게 가진다. 하지만 최근에 C++ 표준회의에서 namespace가 추가됨으로서 [Str94], public 서브시스템 클래스를 노출시킬 수 있게 되었다.[Str94] (충돌의 여지를 줄였다는 편이 맞을듯..)
         Compiler 서브시스템은 BytecodeStream 클래스를 정의한다. 이 클래스는 Bytecode 객체의 스트림부를 구현한다. Bytecode 객체는 머신코드를 구체화하는 bytecode를 캡슐화한다. 서브시스템은 또한 Token 클래스를 정의하는데, Token 객체는 프로그램 언어내의 token들을 캡슐화한다.
         Scanner 클래스는 character 스트림을 얻어서 token의 스트림을 만든다.
         Parser 클래스는 Scanner의 token로 parse tree를 구축하기 위해 ProgramNodeBuilder 를 사용한다.
         Parser는 점진적으로 parse tree를 만들기 위해 ProgramNodeBuilder 를 호출한다. 이 클래스들은 Builder pattern에 따라 상호작용한다.
         우리가 토론해온 클래스들은 곧 Compiler 서브시스템을 이룰 것이다. 자 이제 우리는 이 모든 조각들을 함께 묶은 facade 인 Compiler 클래스를 소개할 것이다. Compiler는 소스 컴파일과 특정 machine에 대한 코드변환기능에 대한 단순한 인터페이스를 제공한다.
         이 구현에서는 사용하려는 code-generator의 형태에 대해서 hard-codes (직접 특정형태 부분을 추상화시키지 않고 바로 입력)를 했다. 그렇게 함으로서 프로그래머는 목적이 되는 아키텍처로 구체화시키도록 요구받지 않는다. 만일 목적이 되는 아키텍처가 단 하나라면 그것은 아마 이성적인 판단일 것이다. 만일 그러한 경우가 아니라면 우리는 Compiler 의 constructor 에 CodeGenerator 를 인자로 추가하기 원할 것이다. 그러면 프로그래머는 Compiler를 instance화 할때 사용할 generator를 구체화할 수 있다. Compiler facade는 또한 Scanner나 ProgramNodeBuilder 등의 다른 협동하는 서브시스템클래스를 인자화할 수 있다. 그것은 유연성을 증가시키지만, 또한 일반적인 사용형태에 대해 인터페이스의 단순함을 제공하는 Facade pattern의 의의를 떨어뜨린다.
         AbstactFactory 는 Facade구현시 서브시스템 독립적인 방법으로 서브시스템 객체를 만들 수 있는 인터페이스를 제공하기 위해 사용한다. Abstract Factory는 또한 플랫폼 비독립적 클래스를 감추기 위해 Facade의 대안으로서 사용할 수 있다.
         Mediator 는 존재하는 class들의 기능들을 추상화시킨다는 점에서 Facade와 비슷하다. 하지만 Mediator의 목적은 정해지지 않은 동료클래스간의 통신을 추상화시키고, 해당 동료클래스군 어디에도 포함되지 않는 기능들을 중앙으로 모은다. Mediator의 동료클래스들은 Mediator에 대한 정보를 가지며 서로 직접적으로 통신하는 대신 mediator를 통해 통신한다. 대조적으로 facade는 단지 서브시스템들을 사용하기 편하게 하기 위해서 서브시스템들의 인터페이스를 추상화시킬 뿐이다. facade는 새로운 기능을 새로 정의하지 않으며, 서브시스템 클래스는 facade에 대한 정보를 가질 필요가 없다.
  • MFC/MessageMap . . . . 33 matches
          * 사용자 정의 메시지란 : 특정한 시점에서 메시지를 보내서 다른 객체의 함수를 실행 시킬수 있다. 굉장히 유용하다. 일종의 콜백 함수 역할을 수행할 수 있는것이다. 즉 어떠한 다른 클래스에서 특정 시점에서 다른 객체의 특정 함수를 실행시켜야 할 필요가 있을때 사용하면 유용하고, 소켓 프로그래밍에서 자주 사용된다.
          * 사용 예 : 어떤 클래스가 view 클래스멤버 변수이다. 해당 클래스는 파일을 다운로드 받는 클래스인데 해당 클래스에서 다운로드가 끝났을 경우 view에 있는 serialize 함수를 실행해야 한다. 허나 현재 view클래스가 그 해당 클래스멤버로 가지고 있기에 include 로 해당 클래스에서 view 클래스를 포함할 수도 없고, 또 view 클래스의 현재 실행되는 객체를 얻을 방법도 마땅히 없다. 이때 해당 클래스에서 다운로드가 끝난 시점에서 다운로드가 끝났다는 메시지를 발생시켜서 view에 있는 serialize 함수를 실행시킬 수 있다. 이게 바로 사용자 정의 메시지 발생을 이용한 사례..
          afx_msg LRESULT OnAcceptClient(WPARAM wParam, LPARAM lParam); // 이부분에 이렇게 정의한 메시지를 실행할 함수를 넣어준다. 함수명은 하고 싶은데로..
         ON_MESSAGE(UM_ACCEPTCLIENT, OnAcceptClient) // 이부분에서 UM_ACCEPTCLIENT가 발생하면 OnAcceptClient함수를 실행시킨다고 맵핑한다.
          afx_msg void OnAppAbout(); // 위저드로 생성되는 기본 코드에서는 오로지 ID_APP_ABOUT 매시지 만을 처리하는 함수가 존재한다.
          DECLARE_MESSAGE_MAP() // 메시지 맵이 정의된 클래스에는 반드시 이 매크로 함수가 포함되어야 한다.
          ''매시지를 처리할 수 있는 클래스는 MFC의 계층구조상 CCmdTarget 클래스를 상속받은 클래스라면 어디서든 가능하다.''
          클래스의 정의 부분에 DECLARE_MESSAGE_MAP()을 포함했다면 그 클래스의 구현 부분에는 반드시 BEGIN_MESSAGE_MAP(), END_MESSAGE_MAP()매크로가 반드시 추가되어야 한다. 이 부분에서는 WM_COMMAND 형태를 갖는 메시지 만을 처리하고 있다.
          ON_COMMAND() 매크로 함수는 지정된 메시지 식별자(ID_..)와 특정 함수를 묶어주는 역할을 한다.
         MFC에서는 기본적으로 메시지가 전달되는 특정 순서에 따라서 메시지가 처리되고 처리 코드가 업을 결우 다음 순서의 클래스에서 그 메시지를 처리한다. 결국 그 메시지를 처리하는 코드가 없다면 메시지는 윈도우로 넘겨지고 폐기처리된다.
  • 새싹교실/2012/AClass/1회차 . . . . 33 matches
          +: 더하는 함수
          -: 줄이는 함수
         1.함수가 무엇인지 쓰고, 예제 프로그램을 하나 만들어 주세요.
         - 함수란 프로그램내에서 동일한 명령문들의 반복되는 부분을 모아놓은 집합체이다. 피연산자나 식과 같이, 함수는 데이터형과 값을 갖고 있다.
         float addfun (para11,para2) // float 데이터형으로 정의된 함수 addfun 선언
          float a; // 함수 내부의 지역 변수 a 선언
         - return은 현재있는 함수에서 빠져나와 그 함수를 호출했던 곳으로 되돌아 가라는 뜻, 되돌아 가면서 그 함수를 호출했던 곳에 어떤 값을 반환하는 것,
         3.함수형이 무엇인지 쓰고, void타입은 왜 return하지 않는지 써주세요.
         - 함수형 프로그래밍은 프로그래밍의 주된 구조가 함수 호출에 기반을 둔 프로그래밍을 말한다. 기존 명령형 언어로 작성한 프로그램보다 간결하고 더 추상적이며 이해하기 쉽고 형식적인 분석과 조작이 용이하다는 특징이 있다.
         4.재귀함수가 무엇인지 써 주세요.
         - 함수내에서 자기자신을 다시 호출하는 함수
          표준 입출력 라이브러리 함수를 사용하기 위해서 쓴다.
         표준 라이브러리 함수를 사용하기 위해서 해당 함수의 선언을 포함하는 헤더파일을 포함해야한다.
         1. 함수가 무엇인지 쓰고, 예제 프로그램을 하나 만들어 주세요.
         현재의 함수에서 빠져나가는 것.
         3. 함수형이 무엇인지 쓰고, void타입은 왜 return하지 않는지 써주세요.
         4. 재귀함수가 무엇인지 써 주세요.
         자신이 스스로를 호출하는 함수
         1. 재귀함수를 이용한 프로그램을 하나 짜 보세요.(eg.1~n까지의 합, n!구하기등)
         - 라이브러리나 다른 파일에 있는 함수들과 연결시키는 과정
  • Android/WallpaperChanger . . . . 32 matches
          * WallpaperManager 클래스를 통해 할수 있더라
          * 액티비티 클래스
          * 서비스 클래스
         내부 클래스와 함께 패키지 범위를 사용하라
         안드로이드에서는 나쁜 생각입니다. 가상 메소드 호출은 인스턴스 필드 참조보다 더 비용이 높습니다. 일반적인 객체 지향 프로그래밍 관습에 따르거나, 공용 인터페이스에서 getter, setter을 가지는 것은 이치에 맞습니다. 그러나 클래스 내부에서는 언제나 직접적으로 필드 접근을 해야합니다.
         (멤버 변수라는 것을 명확히 하기 위해 명시적인 "this"를 사용하고 있습니다.)
         mScrollBar 멤버 필드에 네 개의 분리된 참조가 있습니다. 지역 스택 변수로 mScrollBar를 캐싱 함으로써, 네 개의 멤버 필드 참조가 더욱 효율적인 네 개의 스택 변수 참조로 바뀌었습니다.
         클래스의 상단에 있는 다음 선언을 고려해 봅시다:
         컴파일러는 클래스가 처음 사용될 때 실행하게 되는 <clinit>라 불리는 '클래스 초기화 메소드'를 생성합니다. 이 메소드가 intVal에 42 값을 저장하고, strVal에는 클래스파일 문자 상수 테이블로부터 참조를 추출하여 저장합니다. 나중에 참조될 때 이 값들은 필드 참조로 접근됩니다.
         클래스는 더이상 <clinit> 메소드를 필요로 하지 않습니다. 왜냐하면 상수들은 VM에 의해 직접적으로 다루어 지는 '클래스파일 정적 필드 초기자'에 들어가기 때문입니다.intVal의 코드 접근은 직접적으로 정수 값 42를 사용할 것이고, strVal로의 접근은 필드 참조보다 상대적으로 저렴한 "문자열 상수" 명령을 사용하게 될 것입니다.
         "final"으로 메소드나 클래스의 선언을 하는 것은 즉각적인 성능 이득을 주지는 못하지만, 특정한 최적화를 가능하게 합니다. 예를 들어, 컴파일러가 서브클래스에 의해 오버라이드될 수 없는 "getter"메소드를 알고 있다면, 메소드 호출을 inline화 할 수 있습니다.
         여러분은 또한 지역 변수를 final로 선언할 수 있습니다. 하지만 이것은 결정적인 성능 이득은 없습니다. 지역 변수에는 오직 코드를 명확히 하기 위해서 "final"을 사용합니다 (또는 예를 들어 익명 내부 클래스를 사용해야 한다면 가능).
         900 바이트의 클래스 파일 (Foo$Shrubbery.class) 로 변환됩니다. 처음 사용할 때, 클래스 초기자는 각각의 열거화된 값들을 표기화 하는 객체상의 <init>메소드를 호출합니다. 각 객체는 정적 필드를 가지게 되고 총 셋은 배열("$VALUES"라 불리는 정적 필드)에 저장됩니다. 단지 세 개의 정수를 위해 많은 코드와 데이터를 필요로 하게 됩니다.
         내부 클래스와 함께 패키지 범위를 사용하라
         다음 클래스 정의를 고려해 봅시다:
         여기서 주목해야 할 중요한 것은, 외부 클래스의 private 메소드와 private 인스턴스 필드에 직접 접근하고 있는 내부 클래스(Foo$Inner)를 정의했다는 것입니다. 이것은 적법하고, 코드는 기대했던 대로 "Value is 27"을 출력합니다.
         문제는 Foo$Inner는 기술적으로는 (비밀로써) 완전히 분리된, Foo의 private 멤버로 직접적인 접근을 하는 것은 적법하지 못한 클래스라는 것 입니다. 이 차이를 연결짓기 위해, 컴파일러는 두 개의 합성 메소드를 만듭니다:
         내부 클래스 코드는 외부 클래스에 있는 "mValue" 필드에 접근하거나 "doStuff" 메소드를 부르기 위해 이 정적 메소드를 부릅니다. 이것은 이 코드가 결국은 직접적인 방법 대신 접근자 메소드를 통해 멤버 필드에 접근하고 있다는 것을 뜻합니다. 이전에 우리는 어째서 접근자가 직접적인 필드 접근보다 느린지에 대해 이야기 했었는데, 이 문제로서 "보이지 않는" 성능 타격 측면에서 특정 언어의 어법이 야기하게 되는 문제에 대한 예제가 될 수 있겠습니다.
         이 문제는 내부 클래스가 접근하는 필드와 메소드 선언에 private 범위가 아닌 package 범위를 가지도록 함으로써 피할 수 있습니다. 이로써 더욱 빠르게 동작하게 되고 자동 생성되는 메소드에 의한 오버헤드를 제거할 수 있습니다. (불운하게도 이 또한 직접적으로 같은 패키지 내의 다른 클래스들이 필드들에 접근할 수 있다는 것을 뜻하게 되며, 모든 필드들은 private로 해야 한다는 표준적인 OO 관습에 거스르게 됩니다. 다시 한번 더 말하자면, 공용 API를 설계하게 된다면 이 최적화를 사용하는 것을 조심스럽게 고민해야만 할 것입니다.)
         우리의 몇 가지 아이디어를 설명하기 위해, 약간의 기초적인 행동들에 대해 대략적인 실행시간을 나열한 테이블을 만들었습니다. 이 값들은 절대적인 숫자가 아니라는 것을 주목해 주십시오: CPU시간과 실제 구동 시간의 조합이고, 시스템의 성능 향상에 따라 변화할 수 있습니다. 그러나 이 값들 사이에 관계를 적용해 보는 것은 주목할 만한 가치가 있습니다 — 예를 들어, 멤버 변수를 더하는 것은 지역 변수를 더하는 것보다 대략 네 배가 걸립니다.
  • MFC/CollectionClass . . . . 32 matches
         MFC에서 제공하는 컬렉션을 다루는 클래스는 그 형태에 따라서 크게 3가지로 구분할 수 있다.
          ''두가지 형태로 구현되어있다. 첫번째는 함수템플릿을 이용한 형태로 구현되어있고, 두번째는 템플릿을 사용하지 않는 방법으로 옛 버전의 VC++에서 부터 사용되어온 방식이다. 현재는 템플릿을 이용한 방법을 사용하는 것이 좋다.''
         객체들의 컬렉션은 CArray, CList, CMap 템플릿 클래스들에 의해서 지원된다. 객체 포인터의 컬렉션은 {{{~cpp CTypedPtrArray, CTypedPtrList, CTypedPtrMap}}} 클래스들에 의해서 지원된다.
         객체의 컬렉션을 정의하는 템플릿 클래스는 MFC의 CObject클래스에서 파생된다. 이런 템플릿 클래스는 기본 데이터 형식이나 사용자가 정의한 클래스, 구조체를 포함한 어떠한 종류의 객체도 저장, 관리하는 것이 가능하다. 이런 클래스들은 내부적으로 복사를 하기 때문에 복사생성자를 만들어야 한다.
          첫번째 타입 인자는 저장될 요소의 타입을 말하며, 두번째 인자는 멤버함수가 사용하게될 인자를 말한다.
          ''{{{~cpp ConstructElements(), DestructElements()}}} 보조함수들은 객체를 삽입, 삭제하는 과정에서 쓰이는 보조 함수들이다.''
          첫번째 타입 인자는 저장될 요소의 타입을 말하며, 두번째 인자는 멤버함수가 사용하게될 인자를 말한다.
          두번ㅤㅉㅒㅤ 인자로쓰이는 참조형은 포인터형이나 일반 객체 타입으로 바꾸는 것도 가능하며, 이것은 프로그래머의 의도에 따라 다르다.
          ''{{{~cpp ConstructElements(), DestructElements(), CompareElements()}}} 보조함수들은 객체를 삽입, 삭제, 검색하는 과정에서 쓰이는 보조 함수들이다.''
         첫번째 인자는 기본 포인터 리스트 클래스인 CObList, CPtrList중에서 선택. CObList는 CObject의 파생 클래스를, CPtrList는 void*형의 포인터들의 리스트를 지원한다.
          ''제공되는 멤버 함수들은 CList에 의해서 제공되는 것들과 거의 비슷하며, 연산이 포인터에 대해서 행해진다는 것은 다른 점이다.''
          || {{{~cpp GetHead()}}} || 리스트의 가장 앞에있는 포인터를 리턴. IsEmpty() 검사 필요. ||
          || {{{~cpp GetTail()}}} || 리스트의 끝에 존재하는 포인터를 리턴. IsEmpty() 검사 필요. ||
          || {{{~cpp RemoveHead()}}} || 리스트의 가장 앞에 있는 포인터를 삭제. IsEmpty() 검사 필요. ||
          || {{{~cpp RemoveTail()}}} || 리스트의 가장 끝에 있는 포인터를 삭제. IsEmpty() 검사 필요. ||
          || {{{~cpp GetNext(POSITION)}}} || 레퍼런스 인수로 전달된 POSITION형식의 변수가 가ㅤㄹㅣㅋ미는 위치에 있는 포인터를 리턴한다. 끝에 도달하면 POSITION은 NULL로 할당. ||
          ''CTypedPtrList의 기본 클래스인 CObList로 부터 상속받은 것들''
  • Gof/State . . . . 31 matches
         객체의 내부 상태가 바뀌었을 때 객체의 행동을 바꿀 객체를 허용한다. 객체는 마치 객체의 클래스가 변경된 것처럼 보일 것이다.
         네트워크 커넥션을 나타내는 TCPConnection 라는 클래스를 생각해보자. TCPConnection 객체는 여러가지의 상태중 하나 일 수 있다. (Established, Listening, Closed). TCPConnection 객체가 다른 객체로부터 request를 받았을 때, TCPConnection 은 현재의 상태에 따라 다르게 응답을 하게 된다. 예를 들어 'Open' 이라는 request의 효과는 현재의 상태가 Closed 이냐 Established 이냐에 따라 다르다. StatePattern은 TCPConnection 이 각 상태에 따른 다른 행위들을 표현할 수 있는 방법에 대해 설명한다.
         StatePattern 의 주된 아이디어는 네트워크 커넥션의 상태를 나타내는 TCPState 추상클래스를 도입하는데에 있다. TCPState 클래스는 각각 다른 상태들을 표현하는 모든 클래스들에 대한 일반적인 인터페이스를 정의한다. TCPState의 서브클래스는 상태-구체적 행위들을 구현한다. 예를 들어 TCPEstablished 는 TCPConnection 의 Established 상태를, TCPClosed 는 TCPConnection 의 Closed 상태를 구현한다.
         TCPConnection 클래스는 TCP 커넥션의 현재 상태를 나타내는 state 객체를 가지고 있다. (TCPState 서브클래스의 인스턴스) TCPConnection 은 이 state 객체에게 모든 상태-구체적 request들을 위임 (delegate) 한다. TCPConnection 은 커넥션의 특정 상태에 대한 명령들을 수행하기 위해 TCPState 서브클래스 인스턴스를 이용한다.
          * 객체의 상태에 대한 처리를 위해 구현하는 다중 조건 제어문이 거대해질 경우. 이 상태들을 일반적으로 하나나 그 이상의 열거형 상수들로 표현된다. 종종 여러 명령들은 객체 상태에 따른 처리를 위해 비슷한 유형의 조건 제어와 관련한 코드를 가지게 된다. StatePattern 은 각각의 조건분기점들을 클래스로 분리시킨다. 이는 객체의 상태들을 다른 객체로부터 다양하게 독립적일 수 있는, 고유의 권리를 가지는 객체로서 취급하도록 해준다.
          * 현재 상태를 정의하는 ConcreteState 서브클래스의 인스턴스를 가진다.
          * 각각의 서브클래스들은 Context의 상태들과 관련된 행위들을 구현한다.
          * Context 나 ConcreteState 서브클래스는 상황에 따라 state를 결정할 수 있다.
         일단, 우리는 TCPConnection 클래스를 정의한다. TCPConnection 은 데이터를 전달하고 상태 전환을 위한 request를 다루는 인터페이스를 제공한다.
         TCPConnection 은 _state 멤버변수를 이용, TCPState 의 인스턴스를 유지한다. TCPState 클래스는 TCPConnection 의 상태-전환 인터페이스를 중복하여 가진다. 각각의 TCPState 명령들은 TCPConnection 인스턴스를 인자로서 취하며, TCPState 로 하여금 TCPConnection 으로부터 데이터를 접근하거나 현재 커넥션의 상태를 전환할 수 있도록 한다.
         TCPState의 서브클래스들은 상태-구체적 행위들을 구현한다. TCP 커넥션은 다양한 상태일 수 있다. Established, Listen, Closed 등등. 그리고 각 상태들에 대한 TCPState 의 서브클래스들이 있다. 여기서는 3개의 서브클래스들을 다룰 것이다. (TCPEstablished, TCPListen, TCPClosed)
         TCPState 서브클래스는 내부 상태를 가지지 않는다, 그러므로 TCPState는 공유될 수 있고, 각각 단지 하나의 인스턴스만이 요구되어진다. 이 TCPState 서브클래스의 각각의 유일한 인스턴스들은 정적함수인 Instance 로 얻어진다. (TCPState 서브클래스는 Singleton 으로 만들어진다.)
         각각의 TCPState 서브클래스는 해당 상태에 알맞는 request 에 대한 상태-구체적 행위들을 구현한다.
         상태-구체적 작업들이 수행된 뒤, 이 명령들은 TCPConnection 의 상태를 전환하기 위해 ChangeState 명령을 호출한다. TCPConnection 은 TCP 커넥션 프로토콜에 대해 모른다. TCP에 대한 각각의 상태전환과 행동들을 정의하는 것은 TCPState 서브클래스들이다.
         툴-구체적 행위를 구현하는 서브클래스를 정의하는 곳에 대해 Tool 추상 클래스를 정의할 수 있다. drawing editor 는 currentTool 객체를 가지며, request를 이 객체에 위임시킨다. 사용자가 새 tool를 골랐을 때, drawing editor 는 행위를 전환해야 하므로 따라서 이 객체는 교체된다.
         이 방법은 HowDraw [Joh92]와 Unidraw [VL90] drawing editor 프레임워크에 이용되었다. 이는 클라이언트로 하여금 새로운 종류의 tool들을 쉽게 정의할 수 있도록 해준다. HowDraw 에서 DrawingController 클래스는 currentTool 객체에게 request를 넘긴다. UniDraw에서는 각각 Viewer 와 Tool 클래스가 이와 같은 관계를 가진다. 다음의 클래스 다이어그램은 Tool 과 DrawingController 인터페이스에 대한 설명이다.
         Coplien's Envelope-Letter idiom [Cop92] 는 State 와 관련되어있다. Envelope-Letter 는 run-time 시에 객체의 클래스를 전환하는 방법이다. StatePattern 은 더 구체적이며, 객체의 상태에 그 행위가 의족적일때에 다루는 방법에 촛점을 맞춘다.
  • MFC/Serialize . . . . 31 matches
         MFC의 document 는 간단한 클래스가 아니다. 이 클래스는 일반적으로 다양한 객체들을 포함한다.
          CXXXDoc 클래스의 객체가 시리얼화 입력과정동안 응용 프로그램을 통해 동적으로 생성될 수 있도록 한다. IMPLEMENT_DYNCREATE와 매치. 이 매크로는 CObject 에서 파생된 클래스에만 적용된다. 따라서 직렬화를 하려면 클래스는 직접적이든 간접적이든 CObject의 Derived Class 여야한다.
          기본 클래스로부터 상속된 멤버들을 포함하여 CXXXDoc객체가 적절하게 동적으로 생성될 수 있도록 하는데 필요한 것이다.
          클래스의 데이터 멤버들을 직렬화하는 역할
          MFC기반의 스트림을 제공하는 클래스이다. 객체들을 파일에 출력하거나, 그것을 입력 스트립으로서 복구하는 스티리밍에 대한 메커니즘을 제공한다.
          클래스 안에는 CFile 객체가 있으며, CArchive는 실제로 이 클래스를 통해서 파일 입출력을 전담시킨다.
         = 클래스에 직렬화 기능 추가 =
         매크로는 클래스의 이름을 인수로 받는다. 따라서 만약 CExample 에 직렬화 기능을 추가한다면 CExample 의 정의부의 내부 어느 곳에서나
         구현 파일에 넣어야할 IMPLEMENT_SERIAL()는 3가지의 인수를 취한다. 첫번재는 이름, 두번재는 바로 윗 단계의 기본 클래스, 프로그램에 대한 스키마 번호(scheme number), 혹은 버전을 나타내는 부호 없는 32비트 정수를 인자로 받는다.
         이후에 클래스 정의를 수정한다면 스키마 번호를 바꾸어야 한다. (다른 버전의 파일을 읽으려 하면 예외를 발생시킨다.
         만약 CExampleDerived 가 CExample의 자식 클래스인데 이 클래스를 직렬화 하기위해서는 모든 중간 단계의 클래스 수준에서 직렬화가 구현되어야 한다.
         직렬화는 CDocument 객체에서 Serialize() 이벤트가 발생하게 되면 내부에 지정된 모든 멤버 변수들에게 Serialize 메시지를 보내서 결국엔 기본형의 데이터를 <<. >>와 같은 기 지정된 오버라이딩 함수를 통해서 처리하는 방식으로 이루어져있다.
          * 클래스가 CObject 의 자식 클래스 인지 확인하라.
          * DECLARE_SERIAL() 매크로를 추가하라. 만약 바로 상위의 클래스가 CObject 가 아니라면 바로 상위의 클래스에 추가하라)
          * Serialize() 함수클래스멤버 함수로 선언하라.
          * IMPLEMENT_SERIAL() 매크로를 클래스 구현을 포함하고 있는 파일에 추가하라.
          * 클래스에대한 Serialize()를 구현하라.
  • AcceleratedC++/Chapter8 . . . . 29 matches
         WikiPedia:Generic_function : 함수를 호출하기 전까지는 그 함수의 매개변수 타입이 무엇인지 알 수 없는 함수.
         WikiPedia:Generic_function : 함수의 호출시 인자 타입이나 리턴타입을 사용자가 알 수없다. ex)find(B,E,D)
         함수의 호출시 함수의 매개변수를 operand로 하여 행해지는 operator의 유효성을 컴파일러가 조사. 사용 가능성을 판단
         그렇다면 어떻게 함수가 어떠한 자료구조를 만족 시키는지 판단할 수 있는가?
         반복자를 생각해보자. 만약 특정 자료구조가 반복자를 리턴하는 멤버함수를 갖는 다면 반복자를 인자로 받는 function들에 대해서 그 자료구조는 유효하다고 판단할 수 있다.
         template <class T> // type 매개변수의 지정, 이 함수의 scope안에서는 데이터 형을 대신한다.
          실제 컴파일시 컴파일러는 프로그래머가 지정한 타입으로 이 함수를 인스턴스화 시켜서 생성하고 바인딩한다.
          typename 은 아직 인스턴스화 되지 않은 함수를 컴파일러가 읽어들일때 타입 매개변수와 관계된 타입의 형을 생성할때 앞에 붙여야 하는 키워드 임. ex) vector<T> or vector<T>::size_type
          STL은 실제로 함수의 인스턴스화에 관한 표준적인 방식을 제정하지 않았다. 따라서 각 컴파일러마다 서로 다른 방식으로 함수를 인스턴스화한다. 따라서 자신의 컴파일러의 특징을 파악하는 노력이 필요.
          === 8.1.3 제네릭 함수와 타입 ===
          실제 제네릭 함수의 사용에서 가장 문제시 되는 것은 함수내부의 연산을 매개변수 타입이 지원을 하는 가이다.
          '''max 함수의 구현'''
          || find(c.begin(), c.end(), val) || 일반적인 함수의 작성 가능. 반복자를 통해서 반복자가 제공하는 방식으로 동작가능 ||
          * 1의 방식으로 작성된 함수으이 rbegin() 같은 템플릿 멤버 함수를 이용해서 역순 검색도 가능하게 작성된다.
          STL 함수를 보면 인자로 받는 반복자(iterator)에 따라서 컨테이너의 함수 사용 유효성을 알 수 있다.
          예를 들자면 find(B, E, D)같은 함수의 경우 ''아주 단순한 제한적 연산만을 이용''하기 때문에 대부분의 컨테이너에 대해서 사용이 가능하다. 그러나 sort(B, E)같은 경우에는 ''기본적인 사칙연산들을 반복자에 대해서 사용''하기 때문에 이런 연산을 지원하는 string, vector 만이 완벽하게 지원된다.
          상기 2개의 구현 모두 begin, end iterator를 순차적으로 접근하고 있음을 알 수 있다. 상기의 함수를 통해서 순차 읽기-전용의 반복자는 '''++(전,후위), ==, !=, *'''를 지원해야한다는 것을 알 수 있다. 덧 붙여서 '''->, .'''와 같은 멤버 참조 연산자도 필요로하다. (7.2절에 사용했떤 연산자이다.)
          class In 형의 반복자는 함수가 진행되는 동안 반복자를 통해서 읽기 연산만을 수행한다. class Out 형의 반복자는 *dest++ = *begin++; 의 연산을 통해서 쓰기 연산을 수행한다. 따라서 class Out 반복자는 '''++(전,후위). =''' 연산자만을 평가할수 있으면 된다.
          순방향 연산자의 모든 연산을 지원하고 '''--'''연산을 지원한다면 이 반복자는 '''양방향 반복자(bidirection iterator)''' 라고 부른다. 표준 라이브러리 컨테이너 클래스들은 모두 양방향 반복자를 지원함.
  • Gof/AbstractFactory . . . . 29 matches
         구체적인 클래스를 정의하지 않고서, 연관되거나 의존적인 객체집합을 만들수 있는 인터페이스를 제공한다.
         유저인터페이스 툴킷은 다양한 ["룩앤필"] 기준을 제공하도록 고려한다. 다른 룩앤필은 스크롤바, 윈도우, 그리고 버튼처럼 다른 모습과 행동양식의 유저 인터페이스 ["Widget"]을 제공한다. 이식가능한 룩앤필 기준을 위해서는, 개별적 룩앤필 Widget을 위한 어떤 애플리케이션은 ["하드-코드"] 가 아니어야 한다. 즉석으로 정의한 룩앤필 클래스는 나중에 룩앤필을 바꾸기 어렵게 만든다.
         이 문제는 기본적인 Widget의 인터페이스를 정의한 abstract WidgetFactory 클래스를 정의함으로써 해결할 수 있다. 또한 모든 종류의 Widget에는 추상클래스가 존재한다, 그리고 구체적인 서브 클래스는 Widget을 상속해서 룩앤필 기본을 정의한다. WidgetFactory의 인터페이스는 각각의 추상 Widget 클래스의 새로운 객체를 반환하는 기능을 가지고 있다. 클라이언트는 이런 기능을 수행해서 Widget 인스턴스를 만든다. 그러나 클라이언트는 사용하는 클래스의 구체적인 내용에 대해서는 신경쓰지 않는다. 이처럼 클라이언트는 일반적인(?) 룩앤필의 독립성에 의존한다.
         각각의 룩앤필에는 해당하는 WidgetFactory의 서브클래스가 있다. 각각의 서브클래스는 해당 룩앤필의 고유한 widget을 생성할 수 있는 기능이 있다. 예를 들면, MotifWidgetFactory의 CreateScrollBar는 Motif 스크롤바 인스턴스를 생성하고 반환한다, 이 수행이 일어날 동안 PMWidgetFactory 상에서 Presentation Manager 를 위한 스크롤바를 반환한다. 클라이언트는 WidgetFactory 인터페이스를 통해 개개의 룩앤필에 해당한는 클래스에 대한 정보 없이 혼자서 widget들을 생성하게 된다. 달리 말하자면, 클라이언트는 개개의 구체적인 클래스가 아닌 추상클래스에 의해 정의된 인터페이스에 일임하기만 하면 된다는 뜻이다.
         또한 WidgetFactory는 widget 클래스 간의 의존관계를 형성한다. Motif 스크롤바는 Motif 버튼과 Motif 텍스트 에디터와 함께 사용되어야 한다, 그리고 MotifWidgetFactory를 사용함으로써 이러한 의존성이 강제적으로 이루어지게 된다.
          * 클래스 라이브러리를 나누고 싶고, 인터페이스만을 드러내되, 클래스의 동작을 보이지 않고자 할 때.
          * AbstractFactory에 의해서 정의된 인터페이스와 AbstractProduct 클래스만을 사용한다.
          * 보통의 경우 ConcreteFactory 클래스의 단일 인스턴스는 수행시간(run-time)중에 생성된다.
          * AbstractFactory는 객체(ProductObject)의 생성을 ConcreteFactory의 서브 클래스에 위임한다.
          1. ''독립적인 concrete 클래스들.'' Abstract Factory 패턴은 어플리케이션이 생성한 오브젝트의 클래스를 조정할 수 있도록 해준다.
          factory가 객체를 만들어 내는데 대한 수행과 책임을 캡슐화 하기 때문에 상속한 클래스로부터 클라이언트가 독립적일 수 있다.
          클라이언트는 추상 인터페이스를 통해서 인스턴스를 다룬다. concrete facoty의 수행에서 산물의 클래스 이름은 차단되어있다.
          2. ''산물의 집합간에 전환을 쉽게 해준다.'' concrete factory의 클래스는 어플리케이션에 단 한번, 선언될 때만 쓰인다.
          (AbstractFactory 클래스와 모든 서브 클래스들을 바꾸는것을 포함해서). Implementation 부분에서 이것에 대한 한가지 해결점에 대해 논의 할 것이다.
          InterViews 는 AbstractFactory 클래스들을 나타내기 위해서 'Kit'를 접미사로 사용한다. 이것은 WidgetKit과 DialogKit abstract factory 들을 명확한 ["룩앤필"] UI 객체를 위해서 정의한다. InterViews는 또한 서로 다른 복합 객체를 생성하는 LayoutKit 을 포함다. 예를 들면, 어떤 layout은 문서의 방향(인물이나 풍경)에 따른 서로 다른 복합 객체를 개념적으로 정렬한다.
          ET++[WGM88]은 다른 윈도우 시스템(예를 들면, X Windows 와 SunViews)간의 호환을 수행하기 위해서 Abstract Factory 패턴을 사용했다. 윈도우 시스템의 추상 base 클래스는 윈도우시스템의 자원 객체(예를 들면, MakeWindow, MakeFont, MakeColor)를 생성할 수 있는 인터페이스를 정의한다. Concrete 서브 클래스는 특정 윈도우 시스템에 인터페이스를 수행한다.
         수행시간에, ET++ 은 concrete 윈도우시스템 서브클래스(concrete 시스템 자원 객체를 생성하는)의 인스턴스를 생성한당=== Related Patterns ===
  • AcceleratedC++/Chapter4 . . . . 28 matches
          3장까지 봤던 것은 첫번째것만 있고, 나머지 것은 없다. 프로그램이 작을때는 별로 상관없지만, 커지기 시작하면서부터 2,3번째 것이 결여되면, 나중엔 제어가 불가능해진다. C++에서는 다른 언어와 마찬가지로 함수 + 자료구조를 제공함으로써, 프로그램을 구조화시킬수 있는 방법을 제공한다. 또한 함수 + 자료구조를 묶어서 가지고 놀 수 있는 class라는 도구를 제공해준다.(Chapter9부터 자세히 살펴본다.)
          * 3장까지의 프로그램을 보면 등급을 메기는 부분이 있다. 이 부분을 함수로 추출해보자. 함수로 추출함으로써, 나중에 똑같은 내용을 또 코딩할 필요가 없고, 알아보기도 쉬워진다. 또한 등급 메기는 방법을 바꿀때 그 함수 부분에만 문제를 한정지을 수가 있다. 또한 함수에 이름을 지어줌으로써, 더욱 추상화시킬수가 있게 된다.
          이렇게 생겼다. 둘째줄의 등급 계산하는 부분을 다음과 같이 함수로 뽑아낼 수가 있다.
          * 함수 만드는 법을 요약해보자면
         return_type function_name(parameter lists...) { 함수 내에서 할 일들 }
          * 함수를 호출할때에는 함수를 만들때 주어졌던 parameter lists를 충족시키는 값들을 넣어줘야 한다. 물론 순서도 맞춰줘야 한다. arguments라고도 한다. arguments는 식이 될수도 있다. 그 뒤에 함수로 넘어간 parameter들은 함수 내에서 지역 변수(함수가 끝나면 소멸되는)처럼 작동하게 된다. 즉 그 값들을 복사하게 되는 것이다. 이를 call by value라 한다.
          * 앞에서 우리는 vector에 들어가 있는 값에서 중간값 찾는 걸 했었다. Chapter8에서는 vector에 들어가 있는 type에 관계없이 작동하게 하는 법을 배울 것이다. 지금은 vector<double>로만 한정짓자. median 구하는 루틴을 함수로 빼보자.
          * 또한, 아까 함수 호출하면서 parameter로 넘겨줄때에는 그 값을 복사를 한다고 했다. 저렇게 함수를 호출함으로써, 원래 vector를 손상시키지 않고, 복사본 vector에서 sort를 해서 작업을 처리해 줄수가 있다. 비록 시간이 좀 더 걸리긴 하지만..
          * 이쯤 와서 함수의 유용함을 알았다면, 우리의 성적 매기는 방법을 따로 함수로 뽑아내고 싶을 것이다. 다음 예제를 보자.
          * grade() function : 우리는 아까 grade라는 함수를 만들었었다. 그런데 이번에 이름은 같으면서 parameter는 조금 다른 grade()를 또 만들었다. 이런게 가능한가? 가능하다. 이러한 것을 함수의 overloading이라고 한다. 함수 호출할때 어떤게 호출될까는 따라가는 parameter lists에 의해 결정된다.
          * 지금까지 만든 세개의 함수 median, grade, read_hw 를 살펴보자.
          * median 함수를 보면, vector<double> 파라메터가 참조로 넘어가지 않는다. 학생수가 많아질수록 매우 큰 객체가 될텐데 낭비가 아닌가? 하고 생각할수도 있지만, 어쩔수 없다. 함수 내부에서 소팅을 해버리기 때문에 참조로 넘기면, 컨테이너의 상태가 변해버린다.
          * grade 함수를 보면, vector는 const 참조로 넘기고, double은 그렇지 않다. int나 double같은 기본형은 크기가 작기 때문에, 그냥 복사로 넘겨도 충분히 빠르다. 뭐 값을 변경해야 할때라면 참조로 넘겨야겠지만... const 참조는 가장 일반적인 전달방식이다.
          * read_hw 함수를 보면, 복사는 하지 않고, 그 값을 변경하기 위해 참조만 썼다.
          * 학생의 데이터를 묶어 보자. 여기서 struct란 새로운 구문이 나온다. {}안에 멤버로 넣고 싶은 변수들을 쫙 써주면 된다. 접근할라면 . 써주고 변수 쓰면 된다.
  • AspectOrientedProgramming . . . . 28 matches
          최근 몇 년에 걸쳐 객체지향 프로그래밍(Object-Oriented Programming, OOP)은 절차적 방법론을 거의 완벽히 대체하며 프로그래밍 방법론의 새 주류로 떠오르게 되었다. 객체지향적 방식의 가장 큰 이점 중 하나는 소프트웨어 시스템이 여러 개의 독립된 클래스들의 집합으로 구성된다는 것이다. 이들 각각의 클래스들은 잘 정의된 고유 작업을 수행하게 되고, 그 역할 또한 명백히 정의되어 있다. 객체지향 어플리케이션에서는 어플리케이션이 목표한 동작을 수행하기 위해 이런 클래스들이 서로 유기적으로 협력하게 된다. 하지만 시스템의 어떤 기능들은 특정 한 클래스가 도맡아 처리할 수 없다. 이들은 시스템 전체를 들쑤시며 해당 코드들을 여러 클래스들에 흩뿌려 놓는다. 이런 현상을 횡단적(cross-cutting)이라 표현한다. 분산 어플리케이션에서의 락킹(locking, 동기화) 문제, 예외 처리, 로깅 등이 그 예이다. 물론 필요한 모든 클래스들에 관련 코드를 집어 넣으면 해결될 문제이다. 하지만 이런 행위는 각각의 클래스는 잘 정의된(well-defined) 역할만을 수행한다는 기본 원칙에 위배된다. 이런 상황이 바로 Aspect-Oriented Programming (AOP)이 잉태된 원인이 되었다.
          AOP에서는 aspect라는 새로운 프로그램 구조를 정의해 사용한다. 이는 쉽게 struct, class, interface 등과 같이 특정한 용도의 구조라 생각하면 된다. Aspect 내에는 프로그램의 여러 모듈들에 흩어져 있는 기능(하나의 기능이 여러 모듈에 흩어져 있음을 뜻한다)을 모아 정의하게 된다. 전체적으로, 어플리케이션의 각각의 클래스는 자신에게 주어진 기능만을 수행하고, 추가된 각 aspect들이 횡단적인 행위(기능)들을 모아 처리하며 전체 프로그램을 이루는 형태가 만들어진다.
          이해를 돕기 위해, 그리고 설명을 쉽게 하기 위해 예를 들어가며 AOP 개념을 설명토록 하겠다. 어플리케이션의 여러 스레드들이 하나의 데이터를 공유하는 상황을 가정해보자. 공유 데이터는 Data라는 객체(Data 클래스의 인스턴스)로 캡슐화되어 있다. 서로 다른 여러 클래스의 인스턴스들이 하나의 Data 객체를 사용하고 있으나 이 공유 데이터에 접근할 수 있는 객체는 한 번에 하나씩이어야만 한다. 그렇다면 어떤 형태이건 동기화 메커니즘이 도입되어야 할 것이다. 즉, 어떤 한 객체가 데이터를 사용중이라면 Data 객체는 잠겨(lock)져야 하며, 사용이 끝났을 때 해제(unlock)되어야 한다. 전통적인 해결책은 공유 데이터를 사용하는 모든 클래스들이 하나의 공통 부모 클래스(“worker” 라 부르도록 하자)로부터 파생되는 형태이다. worker 클래스에는 lock()과 unlock() 메소드를 정의하여 작업의 시작과 끝에 이 메소드를 호출토록 하면 된다. 하지만 이런 형태는 다음과 문제들을 파생시킨다.
          1. Java와 같은 단일 상속 모델에서는 worker를 만든다는 것이 불가능할 수 있다. 어떤 클래스들은 이미 다른 클래스들로부터 확장되었을 수도 있기 때문이다. 이는 특히 클래스 계층 구조 설계가 마무리된 후, 뒤늦게 동기화의 필요성을 깨달았을 때 흔히 발생한다. 동기화를 신경 쓰지 않은 범용 클래스 라이브러리를 통해 공유 데이터에 접근하려 하는 경우가 한 예가 될 수 있다.
          1. 재활용성(reusability)이 감소된다. worker 클래스는 동기화가 필요치 않는 클래스나 심지어 다른 동기화 메커니즘이 필요한 상황에서도 사용하길 원할 수 있다. 동기화 관련 코드를 삽입함으로써 worker 클래스는 특정 어플리케이션에 종속적인 클래스로 전락하게 된다.
          1. 동기화는 worker 클래스에 할당된 최우선 작업이 아니다.
          1. 동기화 메커니즘은 worker 클래스의 최우선 작업과 독립적이다.
          1. 한 객체에 대한 동기화 관련 코드가 시스템 전체에 횡단적으로 존재한다. 다수의 클래스와 더 많은 수의 메소드들이 이 동기화 메커니즘에 영향 받는다.
          1. Data 객체를 사용하는 클래스들을 위해 lock 및 unlock 메커니즘을 제공한다(lock(), unlock()).
          1. 이상의 기능을 Data 객체를 사용하는 클래스의 자바 소스를 변경하지 않고 투명하게 수행한다.
          특정 메소드(ex. 객체 생성 과정 추적) 호출을 로깅할 경우 aspect가 도움이 될 수 있다. 기존 방법대로라면 log() 메소드를 만들어 놓은 후, 자바 소스에서 로깅을 원하는 메소드를 찾아 log()를 호출하는 형태를 취해야할 것이다. 여기서 AOP를 사용하면 원본 자바 코드를 수정할 필요 없이 원하는 위치에서 원하는 로깅을 수행할 수 있다. 이런 작업 모두는 aspect라는 외부 모듈에 의해 수행된다. 또 다른 예로 예외 처리가 있다. Aspect를 이용해 여러 클래스들의 산재된 메소드들에 영향을 주는 catch() 조항(clause)을 정의해 어플리케이션 전체에 걸친 지속적이고 일관적으로 예외를 처리할 수 있다.
          먼저 ‘Aspect는 꼭 필요한가?’라는 질문에 답해보자. 물론 그렇지는 않다. 이상에서 언급한 모든 문제들은 aspect 개념 없이 해결될 수 있다. 하지만 aspect는 새롭고 고차원적인 추상 개념을 제공해 소프트웨어 시스템의 설계 및 이해를 보다 쉽게 한다. 소프트웨어 시스템의 규모가 계속 커져감에 따라 “이해(understanding)”의 중요성은 그만큼 부각되고 있다(OOP가 현재처럼 주류로 떠오르는데 있어 가장 중요한 요인 중 하나였다). 따라서 aspect 개념은 분명 가치 있는 도구가 될 것임에 틀림없다.다음의 의문은 ‘Aspect는 객체의 캡슐화 원칙을 거스르지 않느냐?’는 것이다. 결론부터 말하자면 ‘위반한다’ 이다. 하지만 제한된 형태로만 그렇게 한다는데 주목하도록 하자. aspect는 객체의 private 영역까지 접근할 수 있지만, 다른 클래스의 객체 사이의 캡슐화는 해치지 않는다.
  • ProjectPrometheus/Journey . . . . 28 matches
          * Recommender 구현중 User 클래스의 구현
          * 도서관은 303건 초과 리스트를 한꺼번에 요청시에는 자체적으로 검색리스트 데이터를 보내지 않는다. 과거 cgi분석시 maxdisp 인자에 많이 넣을수 있다고 들었던 선입견이 결과 예측에 작용한것 같다. 초기에는 local 서버의 Java JDK쪽에서 자료를 받는 버퍼상의 한계 문제인줄 알았는데, 테스트 작성, Web에서 수작업 테스트 결과 알게 되었다. 관련 클래스 SearchListExtractorRemoteTest )
         서버쪽 클래스들에 대해서 Refactoring 을 시도 데이터클래스이면서 그 용도가 조금씩 달랐던 클래스들을 하나로 묶었다. (일단 모여해쳐 시도용으로) 그러면서 안쓰는 클래스들을 조금씩 지워나갔다. 패키지들중 Test 패키지와 메인 소스 패키지, 임시 코드 패키지들에 대해서 화일들을 옮기고 정리했다. 아직 완벽하게 정리된것 같진 않지만, 개인적으로는 이전에 비해 만족스러웠다. (이제 Target은 Resin 쪽과 임시소스들 디렉토리.)
         ["Jython"] 의 편리함을 깨닫았다. Java 의 클래스들에 대해서 바로 Import 하여서 쓸 수 있다. 그리고 ["Python"] 에 있는 라이브러리들을 거의 그대로 이용할 수 있다. 단, 한글 문제로 걸림. AcceptanceTest 의 경우 ["Python"] 으로 작성함.
          * ''돌아가는 환경의 기본 인코딩을 설정해주면 될 듯 함. Jython이 자바로된 클래스를 바로 쓴다니, Writer 객체를 얻을때 인코딩 설정을 해주면, 해당 Writer로 빠져나가는 내용은 설정된 인코딩을 적용받음. 받아들일때도 마찬가지로, POST로 넘어온 값을 매번 인코딩 할수도 있겠지만, 그보다는, 시스템에 직접 명시해줘서 일괄적으로 바뀌는 방식을 추천함. 예를들자면, contentType="text/html; charset=euc-kr" 하는식으로 설정할 경우, 얻어오는 값들은 euc-kr로 인코딩된 값을 얻어올 수 있음. --이선우''
          * HTML 문서 가져오는 클래스 (Spider) 작성
         암튼, 이후 다시 코드 구축 방법에 대해서 일단 이야기를 하였고, (여기서는 일단 서로 합의하에 ["1002"] 스타일 식으로 진행했다. 해당 클래스가 이용되어지는 모습을 먼저 생각하고, 시나리오에 따른 코드의 뼈대를 만들어가는 방식) 그 이후로는 오히려 진행이 빨라졌다.
         Client (클래스 이용자) 는 Library 에게 keyword 를 던지며 검색을 요청하면, Library는 그 keyword를 이용, 검색하여 Client 에게 돌려준다.
         즉, RDD 를 위한 CRC 세션중 계속 그 클래스들의 추상화 정도를 놓고 서로 클래스들을 추출해내는데 어려움을 겪었다. ('용어는 어느정도 추상화를 시켜야 할 것인가?', '내부 구현 시스템이 가급적이면 드러나지 않는 것이 일반적으로 좋은 디자인이라고 하는것 같은데 막상 우리가 BottomUp 을 하여 뽑아낸 디자인엔 이미 이름이 'HttpSpider' 등 이고..' 등등)
         CRC가 잘 추출되지 않을때는 차라리 UserStory를 따라가면서 클래스를 만들고, 거기에서 다시 CRC를 생각해 보는 방법이 시간 절약에 현명할 것이라고 생각된다. 객체 지향 의 프로그래밍을 추구해온 결과, Scenario나, UserStory를 따라가며 코딩하면서 수많은 클래스들이 책임에 따라서 생겨나는 것을 보면서 자연 스러움과, 약간 의아함 마져 들었다.
         왜냐면, 데블스 캠프 금요일 시간이 끝나고 나서 7층에서 석천이와 UserStory를 따라가며 만들어진 RandomWalk2 CRC의 모습에서는 단 3개만의 클래스만이 존재하였다. 하지만, UserStory를 따라가면서 소스 수준의 코딩을 하면 더 많은 클래스로 분화할것을 기대한다. 즉, 코딩을 하면 어쩔수없이 Layer의 최 하위까지 내려갈수 밖에 없으리라고 본다. 자 그럼 문제는 레이어 일것이다. 다행히 현재 코딩된 부분은 전부 logic의 부분으로 취급하고 있지만, logic 내에서 다시 레이어로 나뉘어서 외부에서 접근할수 있는 인자와 없는 인자로 나뉘어 져야 할것이다. 여기서 잠시 기억되는 말
          * 소스 수준 코딩시 더 많은 클래스들이 분화되는 이유는 CRC 중 클래스클래스 간 대화를 할때 넘기는 객체를 따로 표시하지 않으니까. (우리가 7층에서의 RandomWalk2 보면 Class 와 Class 간 대화를 위한 클래스가 4개쯤 더 있음)
          * 그렇다면 3개의 클래스는 구현수준으로 까지 내려왔던가? 어차피 parameter 로 나온 클래스 4개나 우리가 '책임을 맡았다' 라고 하는 클래스 3개나 그 표현수준은 똑같다고 생각하는데. --["1002"]
          * 자칫 RDD 에서의 그 세부클래스들에 대해서 너무 많이 생각하면 BUFD(Big Up-Front Design) 이 되리라 생각한다. 차라리 Class 가 2개였을때 코딩 들어가고, 20-30분 정도 코딩뒤 ["Refactoring"] 을 의식적으로 하여 Big Class 에 대해 Extract Class 를 추구하는게 더 빠르지 않았을까.
          즉, 앞의 디자인의 경우 JSP 페이지들의 네이밍에 Logic 디자인이 영향을 받았다고 할까. 뭐, 어차피 구현부분은 제대로 생각하지 않은 Conceptual Model 에 가까운 것이였지만, 후자의 경우 데이터 클래스와 그 책임을 맡은 클래스들이 더 명시적으로 드러났던것 같다. 전자의 경우도 '이 기능을 맡은 클래스야' 하면서 Responsibilty 식으로 접근하려고 노력했지만, 후자의 경우가 그 용어면에서 더 추상적이였다. (전자의 경우 그 이름이 시스템을 드러내려고 했다.)
  • 새싹교실/2012/주먹밥 . . . . 28 matches
          * 예약어 -> 예약어는 C의 시스템에서 미리 선점해놓은 단어를 의미합니다. 이것을 변수명이나 함수명으로 쓰면 안됩니다.
          * 헤더 파일들에는 뭐가 들어가는지 한번 알아보았습니다. math.h에는 수학에 관련된 함수. time.h에는 시간 제어에 관련됨 함수를 사용했죠 .srand(time(NULL))이 왜 쓰이는 지는 아직 안알려주었답니다^.^
          * 함수 : 사용자의 행동을 이름으로 추상화해서 계속 쓰는 반복을 줄여준다.
          * 포인터 : 포인터변수는 32bit 버전 컴파일러에서 4byte 64bit 버전 컴파일러에서 8byte의 크기를 가집니다. 어떤타입이든 말이죠 (void *), (int *), (float *) 모두 말이에요. int *a는 4byte를 할당받고 a에는 '''주소값(address)'''을 가지게 됩니다. 포인터 (*)를 붙이게 되면 그 해당 주소가 가르키는 '''값'''을 찾아가게 되죠. int형 값말이에요 그러니까 4byte만 찾아오겠죠?
          * 함수가 사용될떄 C는 기본적으로 Call-by-value를 사용합니다. 항상 값복사를 통해 변수의 값들을 전달하죠.
          * 위와 같이 함수 추상화의 완성형은 Call-by-reference를 이용한 전달입니다. 잊지마세요!
          * 함수의 추상화와 더불어 중요한건 함수의 목적에 따른 '''이름짓기(naming)'''입니다. 함수 이름을 보고 용도를 파악할 수 있어야되요!
          * 구조체와 함수 - 구조체도 다른변수와 마찬가지로 Call-by-value와 Call-by-reference방식으로 넘기게 됩니다.
          * 포인터함수와 구조체
          * 함수포인터 설명 - 함수의 이름에는 주소값을 가지고 있어서 포인터로 제어할 수 있다.
          * 함수는 변수가 남아도 실행이 된다?
          * C++이라면 이미지를 그리는 객체를 Templete로 만들어서 paint()함수에 그래픽 *를 넘겨서 자기가 알아서 그리게하는것이 좋다. list에 넣고 for문만 돌리면 끝나니까
          * 운영체제는 파일 시스템을 관리합니다. 관련해서 이번에 가르쳐주는것은 *(포인터:Pointer)관련해서 FILE 구조를 메모리 참조를 통해서 하는것을 알려주게 되었습니다. 파일(File)은 메모리주소로부터 시작되고 운영체제를 이를 관리하기 때문에 C에서 지원하는 라이브러리를 통해 운영체제로 부터 파일을 관리하는 정보를 가진 FILE 구조체를 불러오게 됩니다. 그래서 우리는 *를 통해 주소값을 따라가서 FILE구조체로 그 정보를 얻어오게 되죠. Good Good!
          * 답변 : 객체 지향 프로그래밍(Object Oriented Programming)입니다. 프로그래밍 설계 기법이죠. 전에도 얘기했듯이 프로그래밍 설계 기법은 프로그래머의 설계를 도와 코드의 반복을 줄이고 유지보수성을 늘리는데 있습니다. 하지만 생산성이 있는 프로그래머가 되고싶다면 API를 쓰고 알고리즘을 병행해서 공부해야 된다는것을 알리고 싶습니다. 그리고 단순히 Class를 쓰는것과는 다른기법입니다. 객체 지향적으로 설계된 C++이나 Java에서 Class를 쓰기때문에 Class를 쓰는것이 객체지향으로 알고있는 사람들이 많습니다. 그건... 아니죠. 절차지향 프로그래밍과 다른점은 차차 가르쳐 드리겠습니다. C에서 Class란 개념이 설계상으로 발전했는지 알려드렸습니다. 함수 포인터와 구조체였죠. 그게 원형입니다.
          * 함수포인터 질문 : int *compare(int a, int b), function call에 의한 stack(FILO : first in last out)의 내부 변화. int형 포인터는 int형으로 반환해야지?
          * DIV태그안에 문자를 넣고 x,y좌표에 출력시키는 함수를 짜고싶다.
  • EffectiveSTL/Container . . . . 27 matches
          * vector 는 Sequence Container 니까 보통 Associative Container 들(주로 Map)보다 메모리낭비가 덜함. 그대신 하나 단위 검색을 할때에는 Associative Container 들이 더 빠른 경우가 있음. (예를 들어 전화번호들을 저장한 container 에서 024878113 을 찾는다면.? map 의 경우는 바로 해쉬함수를 이용, 한큐에 찾지만, Sequence Container 들의 경우 처음부터 순차적으로 좌악 검색하겠지.) --[1002]
          * 후자에는 list 등이 있다. 노드는 그냥 포인터만 바꿔 주면 insert, delete가 자유자재로 된다는거 다 알것이다.
          * 결국 이 코드에서 이 컨테이너에서 작동하는 함수를 썼는데, 컨테이너를 같은 계열의 것으로 바꾸면 좋겠지만, 성향이 다른걸로 바꾸면--; 많이 고쳐야 할것이다.
          * 해결책으론 가상함수 등등이 있다. 하지만 더 좋은 방법이 있다.
          * 컨테이너에 값을 넣지 말고, 포인터를 넣는 것이다.
          * range 멤버 메소드는 주어진 두개의 반복자로 크기를 계산해서 한번에 옮기고 넣는다. 벡터를 예로 들면, 만약에 주어진 공간이 꽉 찼을때, insert를 수행하면, 새로운 공간 할당해서 지금의 내용들과, 넣으려는 것들을 그리로 옮기고 지금 있는걸 지우는 작업이 수행된다. 이짓을 100번 해보라, 컴퓨터가 상당히 기분나빠할지도 모른다. 하지만 range 멤버 메소드는 미리 늘려야 할 크기를 알기 때문에 한번만 하면 된다.
          * 잊어버리고 있었던 클래스의 생성자에 관한..
          * Widget b() 이것은 Widget형의 객체를 리턴해주는 b라는 이름을 가진 함수다. 이것과 관련해 파싱 에러가 자주 일어난다고 한다.
          * 컨테이너가 파괴될때 포인터는 지워주겠지만, 포인터가 가리키는 객체는 destroy되지 않는다.(Detected Memory Leaks!)
          * 이를 보완하기 위해 delete를 함수 객체로 만드는 법이 있다.(뭐야 이거?)
          * Fucntion Object 보통 class키워드를 쓰던데, struct(이하 class라고 씀)를 써놨군. 뭐, 별 상관없지만, 내부 인자 없이 함수만으로 구성된 class이다. STL에서 Generic 을 구현하기에 주효한 방법이고, 함수로만 구성되어 있어서, 컴파일시에 전부 inline시킬수 있기 때문에 최적화 문제를 해결했음. 오 부지런히 보는가 보네. 나의 경쟁심을 자극 시키는 ^^;; --["상민"]
          * 또 다른 방법으로 컨테이너에 포인터를 넣는 대신 스마트 포인터를 넣는 것이다.(아악..--; MDC++(MEC++)을 봐야 하는가..ㅠ.ㅠ)
          * 컨테이너를 오토 포인터로 생성하지 말것~
          * 또 이상한 팁이 있군. bool형을 리턴하는 함수를 인자로 같이 넣어주면 그 조건을 만족하는 값은 모조리 지워주는..(함수 포인터일까.. 함수 포인터는 아직도 언제 쓰는건지 모르겠다. 혹시 아시는분은 좀 가르쳐 주세요^^;)
          * 함수포인터임. (또는 위에서의 함수객체.) 해당 함수 객체로 조건을 파악한뒤 삭제하거나 비교,소트 하는 일을 많이 함. --[1002]
         bool badValue(int x) { ... } // 넣어줄 함수 선언
  • Gof/Singleton . . . . 27 matches
         클래스로 하여금 오직 하나의 인스턴스만을 가지게 하며, 어디서든지 접근 가능하도록 한다.
         몇몇 클래스들에 대해서 오직 하나의 인스턴스 만을 가지는 것은 중요한 일이다. 예를 들면, 어떤 시스템에선 수많은 프린터들이 있더라도 거기에는 단 하나의 프린터 스플러만이 있어야 한다. OS에서 돌아가는 화일시스템이나 윈도우 매니저의 경우도 오직 하나여야 한다 (동시에 2-3개의 윈도우매니저가 돌진 않는다.) 디지털 필터의 경우에도 A/D converter는 단 하나를 가진다.
         어떻게 우리는 클래스로 하여금 단 하나의 인스턴스만을 가지도록 보장해줄 수 있을까? 그리고 그러한 인스턴스를 쉽게 접근하게 할 수 있을 것인가? global 변수로 둘 경우 어디서든지 접근가능하겠지만, global 변수는 단일 인스턴스만을 가지도록 할 수 없다.
         더 좋은 방법은 클래스 자신으로 하여금 자기자신의 단일 인스턴스를 유지하도록 만드는 것이다. 이 클래스는 인스턴스가 생성될 때 요청을 가로챔으로서 단일 인스턴스로 만들어지는 것은 보증한다. 또한, 인스턴스에 접근하는 방법도 제공한다. 이것이 바로 SingletonPattern이다.
          * 클래스가 정확히 오직 하나의 인스턴스만이 존재해야 할 때. 그리고 잘 알려진 엑세스 방법으로 어디서든지 접근 할 수 있어야 한다.
          * Instance operation (클래스의 메소드)을 정의한다. Instance 는 클라이언트에게 해당 Singleton의 유일한 인스턴스를 접근할 수 있도록 해준다.
          1. 클래스에 대한 접근이 오직 하나의 인스턴스에게로 제한된다. Singleton 클래스는 자기 자신의 단일 인스턴스를 캡슐화하기 때문에, 클라이언트가 언제, 어떻게 접근하던지 그 접근이 엄격하게 제어된다.
          3. 명령어와 표현을 확장시킬 수 있다. Singleton class는 subclass될 수 있고, 이 확장된 클래스의 인스턴스를 가지고 어플리케이션을 설정하는 것은 쉽다. run-time중에 필요한 경우에도 가능하다.
          5. class operation 보다 더 유연하다. 패키지에서 Singleton의 기능을 수행하기위한 또다른 방법은 class operation들을 사용하는 것이다. (C++에서의 static 함수나 Smalltalk에서의 class method 등등) 하지만, 이러한 언어적인 테크닉들은 여러개의 인스턴스를 허용하는 디자인으로 바꾸기 힘들어진다. 게다가 C++에서의 static method는 virtual이 될 수 없으므로, subclass들이 override 할 수 없다.
         1. unique instance임을 보증하는 것. SingletonPattern의 경우도 일반 클래스와 마찬가지로 인스턴스를 생성하는 방법은 같다. 하지만 클래스는 늘 단일 인스턴스가 유지되도록 프로그래밍된다. 이를 구현하는 일반적인 방법은 인스턴스를 만드는 operation을 class operations으로 두는 것이다. (static member function이거나 class method) 이 operation은 unique instance를 가지고 있는 변수에 접근하며 이때 이 변수의 값 (인스턴스)를 리턴하기 전에 이 변수가 unique instance로 초기화 되어지는 것을 보장한다. 이러한 접근은 singleton이 처음 사용되어지 전에 만들어지고 초기화됨으로서 보장된다.
         다음의 예를 보라. C++ 프로그래머는 Singleton class의 Instance operation을 static member function으로 정의한다. Singleton 또한 static member 변수인 _instance를 정의한다. _instance는 Singleton의 유일한 인스턴스를 가리키는 포인터이다.
         클래스를 사용하는 Client는 singleton을 Instance operation을 통해 접근한다. _instance 는 0로 초기화되고, static member function 인 Instance는 단일 인스턴스 _Instance를 리턴한다. 만일 _instance가 0인 경우 unique instance로 초기화시키면서 리턴한다. Instance는 lazy-initalization을 이용한다. (Instance operation이 최초로 호출되어전까지는 리턴할 unique instance는 생성되지 않는다.)
         더 나아가, _instance 는 Singleton 객체의 포인터이므로, Instance member function은 이 포인터로 하여금 Singleton 의 subclass를 가리키도록 할 수 있다.
         Smalltalk에서 unique instance를 리턴하는 functiond은 Singleton 클래스의 class method로 구현된다. 단일 인스턴스가 만들어지는 것을 보장하기 위해서 new operation을 override한다. The resulting Singleton class might have the following two class methods, where SoleInstance is a class variable that is not used anywhere else:
         물론, 코드 어디에선가 클래스를 인스턴스화하지 않으면 생성자는 호출되지 않을 것이다. C++에서는 MySingleton의 static instance를 정의함으로서 이 문제를 잘 해결할 수 있다. 예를 들어, MySingleton 클래스의 구현부를 포함하는 화일에 다음과 같이 정의하면 된다.
         미로를 만드는 MazeFactory 클래스를 정의했다고 하자. MazeFactory 는 미로의 각각 다른 부분들을 만드는 interface를 정의한다. subclass들은 더 특별화된 product class들의 instance들을 리턴하기 위한 opeation들을 재정의할 수 있다. 예를 들면 BombedWall 객체는 일반적인 Wall객체를 대신한다.
         일단 단순하게, MazeFactory의 subclassing이 필요없다고 가정하자. (잠시 후 subclassing과 관련, 대안적인 방법에 대해 고려해 볼 것이다.) C++ 에서는 static operation인 Instance와 unique instance를 참조하는 static member인 _instance 를 추가함으로서 Singleton 클래스를 구현할 수 있다. 위의 Implementation에서도 언급했듯이 반드시 생성자는 protected로 둠으로서 우발적으로 하나이상의 인스턴스가 생성되는 것을 막는다.
         대응되는 클래스의 실제 구현부분은 다음과 같다.
         Smalltalk-80[Par90] 의 SingletonPattern의 예는 ChangeSet current라는 코드에 대한 change들 집합들이다. 더 적합한 예제로는 클래스들과 그들의 '''metaclass''' 간의 관계이다. metaclass는 클래스클래스로, 각 metaclass는 하나의 인스턴스를 가진다. metaclass들은 이름을 가지지 않지만 (그들의 단일인스턴스를 통한 간접적인 방법을 ㅔㅚ하고), 그들의 단일 인스턴스를 유지하며 일반적으로 다른 클라이언트에 의해 생성되지 않는다.
         InterViews user interface toolkit[LCI+92]는 toolkit의 Session과 WidgetKit 클래스의 unique instance에 접근하지 위해 SingletonPattern을 이용한다. Session은 application의 메인 이벤트를 dispatch하는 루프를 정의하고 사용자 스타일관련 데이터베이스를 저장하고, 하나나 그 이상의 물리적 display 에 대한 연결들(connections)을 관리한다. WidgetKit은 user interface widgets의 look and feel을 정의한다. WidgetKit::instance () operation은 Session 에서 정의된 환경변수에 기반하여 특정 WidgetKit 의 subclass를 결정한다. Session의 비슷한 operation은 지원하는 display가 monochrome display인지 color display인지 결정하고 이에 따라서 singleton 인 Session instance를 설정한다.
  • 상협/삽질일지/2002 . . . . 26 matches
          * AI 오목 하면서, 효율적으로 어떻게 구성할지에 대한 생각을 별로 안해서, 나중에 경우의 수가 많아지자 상당히 힘들어졌다. 그때 한번 날 잡아서 중복되어 보이는 함수들을 다 통합했다. 그 통합하는 시간이 아깝다고 생각했었는데, 한번 통합하자 효율은 극도로 높아졌다. 예전에는 몇개의 기능추가 하면 그 경로를 나름대로 축약을 했었음에도 불구하고 4가지 경로 && 공격 && 방어에 대해서 따로 시간을 내어서 코드들을 작성해야 했다. 그러나 함수들을 최대한 중복되지 않게 축약하자 한번의 기능추가가 바로 공격 && 방어 && 8가지 방향에 대해서 다 적용되는 것이었다. AI 수준 높이는데 드는 노력이 훨씬 줄어 들게 되었다. 효율적으로 프로그래밍을 해야겠다는 것을 막연히 생각하고 있었지만 이 경험으로 인해서 체감을 하게 되었다.
          * Driver driver = (Driver)Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 이거 할때 메인 함수에서 throws Exception 를 하지 않으면 thrown 을 잡거나 선언 해야만 한다는 메시지가 뜬다. 아직 이유는 모르겠다.
          * Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이거는 main 함수 내부가 아닌 곳에서는 에러 뜬다. 엄청 삽질했다. ㅠㅜ 아직 이유는 모르겠다.
          * 방금 삽질 하나 해결..Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이게 메인 함수에서만 되는게 아니라 이 구문을 사용할때는 throws Exception 을 항상 해줘야만 한다는 사실.. ㅡㅡ; 그런데 이 사실을 진작 체감하고 있었다. 그런데 계속 삽질 했다. 그 이유는
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 이게 사용된 바로 그 메소드에서 throws Exception 를 해줘야 하는데 계속 전체 클래스에서 이것을 했었다. 이게 문제의 원인.. 그러나 아직 왜 꼭 throws Exception 구문을 써야 하는지 모르겠고, Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");이게 없는 곳에서 throws Exception 를 쓰면 에러 뜨는 이유도 자세히는 모르겠다. 모르는것 투성.. ㅡㅡ;;
          ''Exception Handling 에 대해서 이해해야 할 것 같은데. Exception 은 해당 함수가 throws 등으로 발생을 시키고, Java 의 경우 그 Exception 을 반드시 처리를 해주는 곳을 만들어야 하지. 해당 메소드 내에서 Exception 이 발생은 하는데, 그 메소드에서 예외처리를 바로 하고 싶지 않으면 (즉, 그 Exception을 그 메소드 내에서 처리하지 않고, 그 메소드를 호출했던 곳 등에서 처리를 한다고 한다면) throws 로 해당 메소드에서 exception 을 또 던져주는 식으로 되겠지. 만일 Class.forName(...) 쓴 구문을 try - catch 로 예외를 또 잡는다면 이야기가 다르겠지만. 자바는 Exception 를 강요하는 관계로 예외는 catch 에서 무엇을 하건, 반드시 해당 발생된 예외를 잡아줘야 함. (그 덕에 최악으로 뻗을 일이 적지. 예외는 발생하더라도) --석천''
          * 이번 삽질은 정말 중대한 삽질이었다. 1학기 평점을 좌우한다고 볼 수 있는 삽질이었다. 1학기 중간고사 대채용으로 내는 자바 프로젝트에서 소켓 부문을 맡은 친구가 알수 없는 에러때문에 엄청난 삽질을 해서 더이상 나아갈수 없다고 했었다. 메신저에서 통신이 안되다니.. ㅡㅡ;; 그 에러는 "No Such Method Found" 에러다. 그러한 Method가 분명히 있는데도 불구하고 안되었다. 나는 황당했다. 그 친구가 자바는 많이 안했어도 MFC랑 C++을 잘해서 소켓을 맡았는데... 나도 그 에러를 같이 찾기 위해서 삽질을 하였다. 소스도 길고 내가 짠것도 아니어서 정말 못 찾을거 같았다. 그 소스는 특성학 모든 클래스가 딱 서버, 클라이언트 두 파일 안에 들어 있었다. 그래서 난 그 클래스들을 각자 파일로 분리해 보기로 했다. 잘 안풀리니깐 한번 정리나 해보면 뭐좀 어떻게 될까 싶은 마음에 그렇게 했다. 그렇게 정리를 하다 문득.. ㅡㅡ;; 같은 이름의 클래스를 서버, 클라이언트에서 각자 다르게 정의해서 사용하는 소스를 발견... ㅡㅡ;;, 그 친구는 아직 자바에 익숙하지 않아서 이런 실수를 했나 보다.. 나도 만약 소스를 클래스별로 파일로 만들 생각을 안했으면 그 에러의 원인을 발견하지 못했을 것이다. 휴. 큰일날 뻔 했넹.. 앞으로는 "No Such Method Found"같은 에러때문에 고생할일은 절대 없기를.. ㅡㅡ;
          * 오늘도 어김 없이 ㅡㅡ;; 삽질을 했다. 이번에는 matrix 클래스를 구현하는데 matrix데이터를 이중 배열로 private영역에 넣어서 이것 저것 해보는데 나중에 클래스의 matrix 데이터를 호출해야할 경우가 생겼다. [4][4] 이거 두개로 리턴할라고 했는데 안되었다. 남훈이형이랑 제본뜬 책찾아 보니깐 배열은 리턴이 안된다고 나왔다. 그래서 고민하다가 *[4] 이거 두개(포인터형 배열 4개짜리)를 사용하고 나중에는 *를 리턴하는 식으로 돌파구를 찾았다.(*[4] 이것도 배열이랑 비슷하게 써먹을수 있었다. 예-> *(matrix[0]+1)) 처음에는 뭔가 되는듯 싶었다. 클래스 내부 배열 설정도 제대로 되고 하였다. 그 .... 러..나.. ㅡㅡ;; 역시나 난 삽질맨이었다. 나중에 + 연산자 재정의 클래스 내에서 객체를 생성해서 리턴할때 뭔가 제대로 먹지가 않았다. 그거 가지고 간만에 ㅡㅡ;; 삽질에 바다에 퐁당 빠졌다. 간만에 해보는 삽질도 그리 유쾌한 일은 아니었다.. -_- 그렇게 계속 신나게 삽질하다가 도저히 안되겠다 싶어서 멤버 데이터를 public에 넣어 버리는 엽기적인 일을 해버렸다. ㅡㅡ; 그 방법밖에는 없는거 같았다. 그 후로는 아무런 걸림돌 없이 쭉쭉 되었다. 진작 이렇게 할걸하는 생각을 했지만 서도 멤버 데이터를 public안에 넣어서 웬지 모를 찝찝함이..
          ''근데.. Matrix 클래스가 있음에도불구하고 왜 Matrix 내의 array를 직접 접근할 일이 생긴건지? 그리고 연산자 재정의와 관련된 문제라면 Matrix 에 인자를 접근할 수 있는 메소드를 넣던지 friend 로 해결해야 하지 않을까 싶음 --["1002"]''
          ''꼭 이중 배열 전체가 return 이 되어야 하나? 넘겨받은 배열에 도로 쓰는 작업이라면, setter 를 만들어주면 될것 같아서. 클래스로 해놓은 이상 배열을 넘기지 말고 아에 클래스 인스턴스를 넘겨버리는 것이 더 나을것이라 생각 --["1002"]''
          * 오늘은 간만에 빡센 삽질을 했다. 오픈GL을 하는데, 여러개 반복되는 구문이 많은거 같아서 내 딴에는 함수화 시켜서 편하게 사용해야지 하고 생각하고 함수화를 했다. 그런데 그 과정에서 여기저기 실수해서 겁나게 삽질했다. 실수하고서는 한번 죽 흩어보지 않고 단지 성급하게 빨리 에러를 찾고자 하는 맘에.. 쩝.. 역시 삽질은 정신적인 스트레스를 너무 많이 준다.
          * 이 에러는 까먹기 전에 적어 놓아야 겠다는 생각이 들어서 여기에 적어야 겠다. 오늘 내가 만든 클래스를 인클루드 할때 난 대소문자 구분안해도 되는줄 알았는데 구분 안하니깐 링크할때 에러 떳다. 이 에러가 왜 나오는건줄 몰라서 겁나게 삽질 했었는데.. ㅡㅡ;
          * 삽질 없는 세상에서 살고 싶어.. ㅠㅜ, 이번에 3D 알카로이드 하는데.. 충돌 처리가 제대로 계속 안되었다.... 근데 방금 수많은 삽질 끝에 해결했다. ㅠㅜ, 안되었던 이유는 내 머리속에서 핑핑 돌아가던 3D 좌표와 컴퓨터가 생각한(내가 예전에 만들었던 함수..) 3D 좌표가 달라서 그랬던 것이다. 이렇게 말하면 쉽지만 실제로 충돌 처리 함수는 금방 만들었는데.. 버그 찾는데 그거보다 5~6배 정도 시간이 더 든거 같다. ㅡㅡ;; 아.. 끝없는 삽질의 나라.~
  • HardcoreCppStudy/두번째숙제/This포인터/변준원 . . . . 25 matches
         그 클래스 내부에서 this는 자신 A의 포인터를 가르키는것이죠
         클래스 내부 함수 f가 있다면
         f()로 클래스 내부에선 호출이 가능한데 정확히 this->f()에서 this가 생략된 형이죠
         class A에서 class B의 내부함수를 호출하는데
         class A에서 class B의 내부함수 호출시에 this라는 인자를 넘겨줍니다
         그러면 B클래스에서 A클래스포인터를 받을수 있기 때문에 A라는 클래스
         클래스 멤버내의 함수에서 자신의 함수를 호출할때 명시적 또는 묵시적으로 사용하는
         포인터입니다.
         class c라는 함수에 GetA라는 함수가 있다고 하고 SaveA라는 함수를 만든다고
         했을때 Save함수 내에 GetA라는 함수를 호출한다고 하면 다음과 같이 사용이
         다른 클래스함수에서 c라는 클래스포인터로 GetA를 호출한다고 하면
  • MoreEffectiveC++ . . . . 25 matches
          * ANSI C++에 대한 제반적인 내용을 깔끔한 필체로 쉽게 쉽게 다루고 있다. 명확한 개념 설명이 돗보인다. 프로그램과 디자인 능력을 향상시키는 35개의 방법이 제시되어 있다. 배치, 가상 생성자, 포인터 레퍼런스 카운팅, 프락시 클래스, 더블 디스패치와 같은 C++의 보다 세련된 기술에 대해 설명하고있다.
         - 포인터와 레퍼런스와의 차이
         - 사용자 정의의 변환 함수 사용
         - 가상 함수 호출과 파라미터 패스의 차이 이해
         - 가상 함수 비용, 다중 계승, 가상 베이스 클래스와 RTTI
         - 클래스 객체수의 제한
         - 스마트 포인터
         - 프락시 클래스
         - 하나 이상의 객체에 대한 가상 함수 생성
         - 리프가 없는 클래스 추상 생성
          * Item 3: Never treat arrays polymorphically - 절대로! 클래스 간의 다형성을 통한 배열 취급을 하지 말라
          * Item 5: Be wary of user-defined conversion functions. - 사용자 정의 형변환(conversion) 함수에 주의하라!
          * Item 12: Understand how throwing an exception differs from passing a parameter or calling a virtual function [[BR]] - 가상 함수 부르기나, 인자 전달로 처리와 예외전달의 방법의 차이점을 이해하라.
          * Item 24: Understand the costs of virtual functions, multiple ingeritance, virtual base classes, and RTTI [[BR]] - 가상 함수, 다중 상속, 가상 기초 클래스, RTTI(실시간 형 검사)에 대한 비용을 이해하라
          * Item 25: Virtualizing constructors and non-member functions. - 생성자와 비멤버 함수를 가상으로 돌아가게 하기.
          * Item 28: Smart pointers - 똑똑한 포인터:스마트 포인터
          * Item 31: Making functions virtual with respect to more than one object. - 하나 이상 객체에 대응하는 함수를 virtual(가상)으로 동작 시키기
          * Item 33: Make non-leaf classes abstract. - 유도된 클래스가 없는 상태의 클래스로 추상화 하라.
          1. 2002.02.15 드디어 스마트 포인터를 설명할수 있는 skill을 획득했다. 다음은 Reference counting 설명 skill을 획득해야 한다. Reference counting은 COM기술의 근간이 되고 있으며, 과거 Java VM에서 Garbage collection을 수행할때 사용했다고 알고 있다. 물론 현재는 Java Garbage Collector나 CLR이나 Tracing을 취하고 있는 것으로 알고 있다. 아. 오늘이 프로젝트 마지막 시점으로 잡은 날인데, 도저히 불가능하고, 중도 포기하기에는 뒤의 내용들이 너무 매력있다. 칼을 뽑았으니 이번달 안으로는 끝장을 본다.
  • ZeroPage_200_OK . . . . 25 matches
          * 자바스크립트에서 자주 this 얘기가 나오던데, 이번에 이야기를 들을 수 있어서 좋았습니다. 개인적인 느낌을 말하자면 함수가 데이터로 취급되는데 함수 내부에서 함수를 호출한 객체(execution context)의 정보를 사용하기 위해서 this를 사용한다는 느낌이는데 맞는지 모르겠군요. p.print를 넘기는 것도 실제로 class p에 있는 함수를 넘기는 게 아니라 p.print에 바인딩 된 어떤 함수를 넘기는 것이니까 내부의 this가 기존 OOP와 같이 해당 class의 인스턴스는 될 수 없겠죠. 그리고 제일 마음에 들었던 것은 역시 예전에 했던 스터디에서 다뤘던 자바스크립트의 네 가지 특징에 대해서 들을 수 있었다는 점이었습니다. 사실 예전 스터디 떄 무척 듣고 싶었는데 개인적인 사정으로 참가를 할 수 없어서 꽤 아쉬웠던 터라 ;;; 마지막에는 개인적인 사정으로 시간이 안 맞아서 좀 급하게 나갔는데, 그래도 최대한 들을 수 있는 데까지 듣기를 잘 한 것 같은 느낌이 들었습니다. - [서민관]
          * 자바스크립트의 언어 특성에 따라서 배우고 기본적인 사용 문법에 대해서 배웠습니다. 명령형 구조적 프로그래밍 언어적인 부분에 대해서는 그렇게 어려운건 없었는데 그 뒤의 함수형 선언적 프로그래밍 언어 부분에서 클로저랑 함수함수를 인자로 주는 부분이 같이 쓰이니까 좀 복잡했었습니다. 조금 더 공부해야 할 것 같습니다. var Person = function(){}; 같은 부분나 this가 new를 했을 때에만 제대로 동작한다는 부분도 특이했습니다. 문법적인 부분 자체는 그렇게 어려운 것 같지 않은데 함수를 중첩해서 쓰거나 그런 부분이 약간 알아보기 힘든 것 같습니다. - [서영주]
          * 서버에서 데이터를 가져와서 보여줘야 하는 경우에 싱글스레드를 사용하기 때문에 생기는 문제점에 대해서 배우고 이를 처리하기 위한 방법을 배웠습니다. 처음에는 iframe을 이용한 처리를 배웠는데 iframe 내부는 독립적인 페이지이기 때문에 바깥의 렌더링에 영향을 안주지만 페이지를 이동하는 소리가 나고, iframe이 서버측의 데이터를 읽어서 렌더링 해줄 때 서버측의 스크립트가 실행되는 문제점 등이 있음을 알았습니다. 이를 대체하기 위해 ajax를 사용하는데 ajax는 렌더링은 하지 않고 요청 스레드만 생성해서 처리를 하는 방식인데 xmlHttpRequest나 ActiveXObject같은 내장객체를 써서 요청 스레드를 생성한다는걸 배웠습니다. ajax라고 말은 많이 들었는데 구체적으로 어떤 함수나 어떤 객체를 쓰면 ajax인건가는 잘 몰랐었는데 일반적으로 비동기 처리를 하는거면 ajax라고 말할 수 있다고 하셨습니다. 그리고 중간에 body.innerHTML을 직접 수정하는 부분에서 문제가 생겼었는데 innerHTML을 손대면 DOM이 다시 만들어져서 핸들러가 전부 다 사라진다는 것도 기억을 해둬야겠습니다. - [서영주]
          * 자기자신의 레퍼런스(사이클릭 레퍼런스), 커스텀 오브젝트(함수 or 객체) 등은 직렬화가 어렵기 때문에 대상에 들어가지 않는다.
          * Builder Pattern의 일종으로 jQuery의 메소드를 실행한 이후에 jQuery 배열 객체를 반환함으로써 함수의 chainning을 해서 사용할 수 있다.
          * Element를 찾을 때 CSS 문법을 이용하여 작업을 할 수도 있고 jQuery의 메소드를 이용해서 작업을 할 수도 있는데, 복잡한 대상을 한 번만 찾아서 작업을 할 경우에는 CSS 문법을 이용하는 것이 좋고, 찾은 대상에서 여러 작업을 할 경우에는 jQuery 함수를 사용하거나 해당 Element를 변수에 저장해 두었다가 사용하는 것이 성능 면에서 좋다.
          * 웹 초기에 css설명했을 때 css셀렉터 문법도 설명을 해주셨었는데 많이 까먹어서 헷갈렸었습니다. -_- 역시 한 두 번 본걸로는 금방 잊어버리기 쉬운 것 같습니다. jQuery함수의 대부분은 호출 후 jQuery객체를 리턴하기 때문에 함수의 체이닝이 가능하다는 얘기를 하셨었는데 구글의 guava도 그렇고 요즘은 이런 형태의 구현이 많은건지 궁금합니다. 그리고 결과 값을 받아서 계속해서 다른 작업을 하는 경우가 아니라면 체이닝이나 그냥 한 번에 계산하는 방식이나 별 차이가 없는건가요? - [서영주]
          * setter, getter - 같은 함수가 set용 인자가 들어있을 경우에는 setter로, 그렇지 않을 경우에는 getter로 실행된다.
          * 이벤트 메소드 - 이벤트 메소드에 함수를 인자로 주지 않고 실행시키면 이벤트를 발생시키는 것이고, 함수 인자를 주고 실행시키면 이벤트 핸들러에 해당 함수를 등록한다. (ex. $(".add_card").click() / $(".add_card").click(function() { ... }))
          * append(), appendTo() - jQuery에는 같은 기능의 함수인데 체이닝을 쉽게 하기 위해서 caller와 parameter가 뒤바뀐 함수들이 있다. (ex. A.append(B) == B.appendTo(A))
          * JSONP - Same Origin Policy를 어기지 않고 Cross Site Scripting을 하기 위한 방법. callback 함수를 만들고 사이트에 특정한 요청을 보내면 callback 함수로 감싼 데이터를 넘겨준다. callback 함수로 감싸진 데이터는 이쪽의 callback 함수의 내용대로 실행된다.
  • 5인용C++스터디/에디트박스와콤보박스 . . . . 24 matches
          에디트 컨트롤은 CEdit 클래스로 표현된다. 멤버함수는 다음과 같다.
         멤버함수 / 설명
         이 멤버함수들 중에서 Create 함수를 사용하면 대화상자 템플리트에 에디트를 배치하지 않고도 실행중에 에디트 컨트롤을 생성할 수 있다.
          CreateEdit라는 프로젝트를 만들어보자. 폼뷰가 아닌 일반 뷰에 에디트를 배치하려면 뷰가 생성될 때 (WM_CREATE) OnCreate에서 에디트를 생성시키면 된다. 우선 뷰의 헤더파일을 열어 CEdit형 포인터를 선언한다.
          m_Edit가 CEdit의 포인터로 선언되었으므로 일단 new 연산자로 CEdit객체를 만든다. 그리고 이 객체의 Create 멤버함수를 호출하여 에디트를 생성한다. Create 함수의 원형은 다음과 같다.
          첫 번째 인수로 에디트의 스타일을 주되 에디트는 메인 윈도우가 될 수 없으므로 WS_CHILD 스타일을 주어야 하고 생성하자마자 보여야 하므로 WS_VISIBLE 스타일을 주어야 한다. 또한 에디트는 디폴트로 경계선을 가지지 않으므로 WS_BORDER 스타일을 주어야 보이게 된다. 두 번째 인수로 에디트가 차지할 사각영역을 주고 세 번째 인수로 에디트의 부모 윈도우의 포인터를 준다. 마지막 인수인 nID는 에디트 컨트롤의 ID이되 통지 메시지를 처리하지 않을 경우는 ID를 주지 않아도 상관없다.
          이렇게 Create 함수로 만든 에디트의 통지 메시지는 어떻게 처리해야 할까. 클래스 위저드가 메시지 핸들러를 만들 때 해주는 세가지 동작을 프로그래머가 직접 해줘야 한다. 우선 메시지 맵에서 메시지와 메시지 핸들러를 연결시켜 준다. ON_EN_CHANGE 매크로에 의해 IDC_MYEDIT 에디트가 EN_CHANGE 메시지를 보내올 때 OnChangeEdit1 함수가 호출된다.
          두 번째로 헤더파일에 메시지 핸들러의 함수의 원형을 선언한다.
          세 번째로 메시지 핸들러 함수 OnChangeEdit1 함수를 작성한다. 함수의 본체 코드는 물론이고 함수명까지 직접 입력해 주어야 한다. 이 함수는 에디트 컨트롤의 문자열을 읽어 들이는 함수이다.
  • 새싹교실/2012/아우토반/앞반/5.10 . . . . 24 matches
         1. 함수
          * 함수란?
          * 함수의 형태
          * 함수의 종류
          * 함수의 정의
          * 함수의 선언, 정의 호출의 의미
         2. 포인터
          * 포인터와 변수의 개념
          * 포인터 연산자
          * 포인터의 종류
          * 인자를 전달받는 함수
          * 포인터를 인자로 받는 함수
          * 포인터의 연산
          * 포인터포인터
          * 포인터와 상수(Const)
         1. void Swap(int*, int*) 함수를 구현하시오.
         처음 printf함수에서 변수 a의 메모리 안에 있는 값을 출력
         다음 printf함수에서 변수 a의 메모리의 주소값을 출력
         다음 printf함수에서 변수 p의 메모리 안에 있는 값을 출력
         네번째 printf함수에서 변수 *p의 값은 0 이고
  • 토비의스프링3/오브젝트와의존관계 . . . . 24 matches
          * User : 사용자 정보 저장용 자바빈 클래스
          * UserDao : JDBC를 이용한 등록, 조회 기능이 있는 DAO 클래스
          * 앞서 만든 클래스가 제대로 동작하는지 확인하려면
          * UserDao 클래스
          * 그럼에도 불구하고 UserDao 클래스 코드에는 여러가지 문제가 있다.
          * 추상클래스를 만들어놓고 상속을 통해 변화를 구현하는 방법 -> 불편하다
          * 1.3.1 클래스의 분리
          * 서로 다른 관심사를 독립적인 클래스로 분리해보자
          * 분리된 두 클래스는 의존관계를 가진다.
          * 클래스 분리에서 가장 중요한 점은 두 클래스가 낮은 결합도를 가져야 한다는 것이다.
          * 코드의 크기가 작고 간단해도 클래스와는 다른 독립적인 관심사를 가지고 있다면 분리해야한다.
          * 클래스의 확장성을 해칠 수 있다.
          * 클래스간의 관계설정
          * 클래스나 모듈은 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다
          * 변경이 필요한 알고리즘을 인테페이스를 통해 외부로 분리시키고, 이를 구체화한 클래스를 필요에 따라 바꿔 사용하게 하는 패턴
          * 1. 스프링이 빈 팩토리를 위한 오브젝트 설정을 담당하는 클래스라고 인식할 수 있도록 @Configuration이라는 애노테이션을 추가한다.
          * 1. 애플리케이션 컨텍스트는 ApplicationContext타입의 오브젝트다. 사용시 @Configuration이 붙은 자바코드를 설정정보로 사용하려면 AnnotationConfigApplicationContext에 생성자 파라미터로 @Configuration이 붙은 클래스를 넣어준다.
          * @Configuration이 붙은 클래스는 애플리케이션 컨텍스트가 활용하는 IoC 설정정보가 된다. 내부적으로는 애플리케이션 컨텍스트가 @Configuration클래스의 @Bean메소드를 호출해서 오브젝트를 가져온 것을 클라이언트가 getBean() 메소드로 요청할 때 전달해준다.
          1. 클라이언트는 구체적인 팩토리 클래스를 알 필요가 없다.
          * 의존관계 : 두 클래스 또는 모듈이 있을 때 한 쪽의 변화가 다른 쪽에 영향을 미치는 상황.
  • 후각발달특별세미나 . . . . 24 matches
         세미나 후 제 귀에 들어온 질문 중에 '함수를 많이 만들면 메모리를 더 사용하지 않는가?'라는 질문이 있었습니다. 누가 자세히 설명 좀 부탁드립니다. --재동
          전문적인 설명은 아니구, 제 생각에는 함수를 사용하여 메모리 사용하는 비용과 프로그래머가 함수를 더 사용하여 소스의 가독성을 올리고, 유지 보수 및 버그를 없애는 비용과 비교를 해볼때 후자가 훨씬더 큰 비중을 차지하기 때문에 함수를 더 사용하여 메모리를 더 사용하더라도 리펙토링의 중요성이 결코 줄어들지 않는다고 생각합니다. 그리고 짧은 소스에서는 리펙토링 하여 함수가 많아 지는것이 낭비처럼 보일지 몰라도 좀더 프로그램이 커질수록 리팩토링을 해놓음으로 해서 추후에 최적화를 하는데에도 훨씬 유리하기 때문에 결국에 가서는 자원도 더 효율적으로 사용하리라고 봅니다. - [상협]
          메모리를 많이 사용한다는 우려의 원인은 많은 변수들에 있습니다. 전달인자를 받거나 값을 리턴할 때, 각각 상응되는 변수가 필요하기 때문이죠. 하지만 변수는 그 변수가 선언된 함수내에서만 효력을 발휘하고 함수가 종료되는 순간 사라집니다(메모리해제). 그러므로 모듈화된(쉽게 이야기해서 함수로 나뉜)프로그램에서는 함수내의 많은 변수들이 메모리를 많이 차지하더라도 그 함수가 끝나면 그 메모리는 해제되어 사용가능해집니다. 그리고 전역변수나 메인함수내의 변수만을 사용하는 프로그램은 프로그램이 끝날 때까지(메인함수가 종료될 때까지) 메모리를 잡아두므로 한번 할당된 메모리는 사용불가능합니다.
          모듈화된 프로그램에서의 메모리 사용의 개념은 '''필요할 때마다 할당해서 쓰고 필요없으면 해제하자'''이고 전역변수나 메인함수내의 변수만을 사용하는 프로그램에서의 메모리 사용의 개념은 '''지금은 안쓰이더라도 나중에 쓸 메모리를 미리 할당하고 사용이 끝났더라도 메모리를 계속 잡아두자'''입니다. 전자의 경우에는 어느 순간 메모리를 많이 사용하는 경우도 있고 어느 순간에는 엄청 적게 사용하는 경우가 있습니다. 메모리 사용이 더 유동적이라고 할 수 있습니다. 밑에 참고 그래프(자체제작)를 참고해주시기 바랍니다. --[강희경]
          '''함수가 많아지면 메모리를 많이 쓰게 될까??'''
          함수의 갯수와 메모리 사용량은 직접적으로 관련이 없습니다. 메모리 사용량과 직접적으로 관련이 있는 것은 함수의 갯수가 아니라 프로그램의 길이 입니다.
          함수가 많다고 프로그램의 길이가 긴 것은 아닙니다. 길이가 짧은 함수를 여러개 가진 프로그램과 길이가 엄청나게 긴 함수를 한개만 가진 프로그램이 있다고 해봅시다. 길이가 더 긴 프로그램은 어떤 것입니까?
          리펙토링에 대해서 생각해 봅시다. 가장 먼저 배운 방법이 무엇이었습니까? 중복제거 입니다. 함수를 늘려 중복을 제거하면 프로그램의 길이는 길어질까요? 짧아질까요?
          물론 함수가 추가되면 전달인자 처리를 위한 약간의 코드가 추가되는 것은 사실입니다. 하지만 그것은 몇바이트에 지나지 않습니다.
         통상 리팩토링에 대한 반론은 다음과 같은 양상을 띕니다. 리팩토링을 많이 한다 --> 함수 개수가 많아진다 --> 콜 체인이 길어진다 --> 속도가 느려진다. 메모리 문제보다는 속도 문제에서 리팩토링에 대한 우려가 불거져 나오는 것이죠.
         그런데, 함수 호출에 의한 오버헤드는 컴파일러/VM 기술이 발전하면서 점점 줄어들고 있고, 문제가 복잡할수록 그런 낮은 단계의 옵티마이제이션보다 높은 단계에서의 최적화가 훨씬 더 효과적인데, 리팩토링이 잘 되어 함수가 잘게 쪼개어져 있으면 높은 단계의 최적화를 하기가 쉬워집니다. (그래도 여전히 로우레벨의 옵티마이제이션이 필요하다면 매크로나 코드 제너레이션을 쓸 수 있습니다. DavidParnas의 [http://www.acm.org/classics/may96/ 논문] 참고)
  • ScheduledWalk/석천 . . . . 23 matches
         어떤 함수 또는 모듈 부터 구현을 해야 할까 궁리했었습니다. 어차피 각 모듈부분에선 그 인자를 구체적으로 명시시키지 않았습니다. 이쯤에서 DFD를 그리고 데이터의 흐름에 대해 표현할 수도 있겠지만, 저는 일단 소스 자체에 촛점을 맞췄습니다. 그래서 필요하면 인자를 하나씩 더 추가하고, 필요없어졌다 싶음 인자를 삭제하는 식으로 접근했습니다. 그래서 따로 HIPO 다이어그램에 Argument 를 넘기는 부분을 표현해두지 않았습니다. (워낙 자주 소스를 고친 관계로. 하지만, 시간이 많이 걸린 일은 아니였습니다.~)
          2. Depth-Module First. -> 깊이가 가장 깊이에 있는 것들이 쉬운 문제일 것이라 판단, 깊이가 깊은 모듈부터 구현하기로 했습니다. (일장일단인데, 그 대신 잘못 접근하면 Bottom-Up 이 되어버릴 수도 있기 때문에.. 이 경우 해당 함수가 하는 일을 명확하게 해줄 필요가 있다고 생각됩니다. 전체 구조 내에서의 역할을 잊어선 안되겠죠.)
         이 함수가 하는 일은 말 그대로 Board 의 Size 를 Input. 판 크기를 입력받는 부분입니다. scanf 나 cin 등으로 간단하게 구현할 수 있겠죠.
         입력데이터를 받아서 처리하는 방법에는 두가지가 있겠습니다. 하나는 리턴값을 넘겨주는 방법, 하나는 인자로 해당 변수의 포인터 또는 레퍼런스를 받은뒤, 그 변수의 값을 변화시켜주는 방법. (scanf 함수가 그러한 방법이지요.) 여기선 간단하게 리턴값을 넘겨주는 방법을 이용했습니다. int 형 두개 변수를 리턴하는 것이라면 구조체를 이용하는 것이 더 간단하리라는 판단에서입니다.
         Input 에서 테스트해본 결과 값이 잘 출력되는군요. 그럼, 계속해서 Input의 다른 함수들인 InputStartRoachPosition(), InputRoachJourney() 에 대해 계속 구현을 해보죠.
         InputRoachJourney() 는 String 문자열인 관계로 좀 다르게 구현했습니다. 아까 말한, 메모리 포인터를 넘겨서 값을 저장하는 방식에 속합니다. 배열은 또다른 포인터와 다름없기에, 이렇게 쓸 수 있습니다.
         사실 이 방법은 위험합니다. char [] 일 journey 의 사이즈를 모르고 있기 때문이죠. 만일 journey 에서 입력받은 여정의 크기가 클 경우 메모리에러를 발생시킬 수 있습니다. 하지만, 일단은 성능은 따지지 않고 '가장 간단하게 돌아가는 소스' 를 생각하기 위해 그냥 저렇게 남겨둬봅니다. 원래라면 배열의 최대값보다 더 큰 여정이 나왔을 경우의 처리 등을 생각해야 합니다. 단, 이 문제에 대해선 InputRoachJourney () 함수 내로 지역화가 어느정도 가능합니다. 여기서는 Structured Programming 식으로 접근하려는 것이 목적이여서, 세부적인 문제에 대해서는 좀 덜 신경썼습니다.
         1. 구현하려는 함수 선택
         4. 함수 호출뒤 return 값에 대해서 printf나 cout 등으로 결과값을 확인해보기.
         다음은 Input 함수 안에서 얻어낸 데이터들을 main 함수까지 끌어올립니다. 이제 ScheduedWalk 모듈에 입력된 데이터를 보내줄 준비가 되었습니다.
         해당 함수 모듈이 완료되었을 것이라 가정하고 코드를 작성해봅니다. 여기서는 IsFinished() 에 일단 주목. (가장 깊은 단계인 IsJourneyEnd 와 IsAllBoardChecked 를 실행해주는 부분이므로)
          3. 실제 함수 모듈을 확인해본다.
         이 이후부터 해당 함수 구현에 대한 프로세스는 다음과 같습니다.
         1. 크거나 그 기능이 애매 또는 모호한 함수/모듈에 대해서 재정의 하기.
         그렇다면, 틀린 생각을 맞다라고 가정하고 만들어진 IsJourneyEnd 또한 틀린 함수가 되겠군요. 이를 수정하고, 해당 소스도 수정합니다. 그리고 계속 프로그램을 돌려봅니다. 그리고 Test Case를 추가합니다.
         음.. Vector 자체로는 별 문제없어 보이네요. 그렇다면 다음은 실제 Roach를 이동시키는 Position 과 관련된 MoveRoach 부분을 살펴보죠. (여기서는 반드시 이동방향을 결정하는 함수와 실제 이동시키는 함수에 촛점을 맞춰야 합니다. board 배열의 값이 update 가 되기 위해선 어떠어떠한 값에 영향을 받는지를 먼저 머릿속에 그려야 겠죠.) 그림이 안 그려지는 경우에는 Debugger 와 Trace, break point 를 이용할 수 있습니다. 하지만, 구조화를 잘 시켜놓았을 경우 해당 문제발생시 버그 예상부분이 어느정도 그림이 그려집니다.
         여기서 얻을 수 있는 교훈 - 이런 변환 부분은 차라리 함수로 만들자는 겁니다. -_-; 이 경우 OO Language 라면 1차원 배열을 이용한 2차원 배열 클래스를 만들어 쓰는 것이 가장 편합니다. 문제를 해당 배열 클래스 내로 지역화 시킬 수 있죠. 여기서는 일단 C로 만들었다고 가정하고 배제합니다.
  • 새싹교실/2011/데미안반 . . . . 23 matches
          * 나중에 포인터를 사용하는 실습을 하다 보면 많은 깨달음을 얻을 수 있지 않을까 싶습니다...
          * 아무래도 성과가 바로바로 눈에 보이게 출력하여 확인할 수 있는 함수이다 보니, 초보자가 바로 이해하기 어려움에도 불구하고 처음에 배우게 되는 듯 합니다.
          * 입, 출력 함수 - printf, scanf
         #include <stdio.h> //printf 함수 사용
         #include <assert.h> //assert 함수 사용
         #include <assert.h> //assert 함수 사용
         #include <assert.h> //assert 함수 사용
         #include <assert.h> //assert 함수 사용
          * 기타 대입 연산자 사용 예에서 -= , /= , %= 한 결과를 assert(val1 == 7); 와 같이 assert함수 안에 넣어 확인하시오.
          * 함수
          * [박성국] - ^오늘은 함수에 대해서 자세히 배우고 그에 필요한 지식인 지역변수 전역변수 static변수에 대해 자세히 배웠습니다.^ 하나하나 배우면서 C언어어에 대한 자신감을 가졌습니다. 특히 Recursive function에 대해 정확한 이해를 통하여 활용할 수 있게 되었습니다. 항상 스펀지같이 쏙쏙 머리속에 들어오는 수업 감사합니다.
          * [이준영] - 수업시간에 제대로 집중을 못해서 잘 못들은 부분을 자세히 배울 수 있어서 다행이었습니다. 재귀함수랑 변수의 유형을 자세히 배웠습니다. 앞으로도 더 많은 걸 배우고 싶어요.
          * [강소현] - 함수의 형태를 반환형이 있는 지의 여부와 매개변수가 있는 지의 여부에 따른 4 가지를 실습하여 차이를 알아보았습니다. 그리고 재귀함수에 대한 진도도 나갔으나, 아무래도 그냥 함수 한번 호출하고 끝낼 때보다 이해가 잘 가지 않는 듯 합니다. 다음 시간에 한번 더 복습할 예정입니다. 재귀함수로 만드는 factorial이나 gcd 같은 것을 점화식을 설명하고 보여주면 좀 더 이해가 쉽지 않을까 싶었습니다.
          * 재귀함수 복습
          * [강소현] - 한 시간은 정말 금방 가네요. 근데 왜 학교 수업 들을 때는 그리 길었던거지!? 재귀함수를 사용할 경우 항상! 빠져나올 수 있는 '''조건'''을 걸어야 한다는 것을 복습했습니다. 뭔가 도미노 원칙 어쩌구 하긴 했지만 정확한 게 아니라 비슷하다-고 했던거에요. 정확한 건 3학년 알고리즘 시간에 divide&conquer을 배우면...<< 간단히 설명하자면 한번에 풀기 힘드니까 나눠서 풀자는 내용입니다.
          * 함수 호출 시, stack에 돌아올 주소를 넣어두고 함수가 종료되면 stack에서 빼와서 돌아간다. LIFO(Last In First Out)의 순으로..
          * Printf함수는 널 문자를 통해서 출력의 범위를 결정 짓는다.
          * 포인터
          * [강소현] - 이후의 내용은... 배우고 싶은 사람에 한해 방학 때 하기로 했습니다.진도를 너무 느리게 나가면 안되겠구나하고 느낀.. ;ㅅ; 작년에는 3번 수업으로 포인터까지 나갔는데, 올해는.. 대상이 다르기는 하지만, 조절을 잘 못하기도 했네요. ㅠㅠ
  • Java Study2003/첫번째과제/장창재 . . . . 22 matches
         자바 API는 윈도우 API와 같이 운영체제에서 제공해 주는 라이브러리와 같은 것입니다. 다시 말해서, 자바 프로그램을 개발하기 위해 사용할 수 있는 라이브러리 또는 클래스들이라 할 수 있습니다. 이러한 자바 API는 서로 관련된 클래스들을 묶어서 패키지 단위로 제공되고 있습니다.
         자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.
         자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.
         자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.
         C와 같이 다른 언어로 작성된 함수를 직접 호출합니다.
         느린(lazy) 클래스 로딩:
         하나의 HTML 페이지 내에 있는 애플릿은 하나의 클래스만을 사용할 경우도 있겠지만, 대부분의 경우 여러 개의 클래스를 필요에 따라 사용하게 됩니다. 여러 개의 클래스를 사용할 경우, 모든 클래스가 동시에 사용되지는 않겠지요. 또한 어떤 클래스는 정의는 되어있지만, 필요에 따라 전혀 사용되지 않을 수도 있겠지요. 따라서, 자바에서는 필요할 경우에만 클래스를 로딩하여 사용하게 됩니다. 이러한 기술을 느린(lazy) 클래스 로딩 이라 합니다.
         이러한 문제점은 느린(Lazy) 클래스 로딩에서 발생하거나 메모리 할당과 가비지 콜렉션이 비결정적이고 느린 최악의 경우(worst-case) 특성을 가지며 stop-start 방식으로 모든 스레드를 멈출 수 있다는 문제점이 있습니다. 이를 해결하기 위해 클래스를 미리 로딩(class preloading)한다거나 정적 초기화(static initializer)를 제거하여 패키지 라이브러리에 대해서는 가상머신 초기화를 사용하고 응용프로그램에서는 명시적인 초기화 를 사용하게 하는 등의 기법을 사용할 수 있습니다. 그리고, 메모리 할당과 쓰레기 수집(garbage collection)에 대해서는 정해진 시간 내에 입터럽트 가능한 쓰레기 수집을 하는 것입니다. 또는 표준화된 실시간 API를 제공함으로써 해결할 수 있습니다.
         C언어를 이용하여 C 프로그램을 작성한다면 반드시 main이라는 시작 함수를 정의해 주어야 하고, 윈도우 응용프로그램을 작성한다고 하면 WinMain이라는 함수를 꼭 작성해 주어야 하지요. 이러한 것을 규약(protocol)이라 합니다. 마찬가지로, 자바 언어를 이용하여 여러 가지 종류의 자바 프로그램을 작성할 수 있는데, 이 때 각 자바 프로그램의 종류에 따라 해당 규약이 서로 다릅니다. 이렇듯 자바를 이용하여 자바 프로그램을 작성한다는 것은 각 자바 프로그램에서 제시하고 있는 규약을 지켜 프로그램을 작성한다는 것입니다. 자바 언어를 이용하여 작성할 수 있는 자바 프로그램의 종류를 살펴보면 다음과 같습니다.
  • Refactoring/BadSmellsInCode . . . . 22 matches
         여기서 딜레마가 온다. 어떻게 인스턴스 변수를 삭제하거나 클래스 계증구조를 만드는가를 표현하는 것은 쉽다. 그건 사소한 문제들이다. 하지만 언제 이러한 것들을 해야 할 것인지 표현하는 것은 쉽지 않다. 나는 (여기서의 I는 Martin Fowler) 프로그래밍 미학이라는 모호한 표현으로 얼버무리지 않고 좀 더 확실한 것을 원했다.
          * 같은 클래스내에 2개이상의 메소드들에 중복코드 존재시 - ExtractMethod
          * 두개 이상 서브클래스 내 중복코드시 - ExtractMethod 한뒤 PullUpField
          * 두개이상의 연관없는 클래스 내의 중복코드 - ExtractClass
         너무 하는 일이 많은 큰 클래스
          * GUI 클래스에서 데이터부가 중복될때 - DuplicateObservedData
         Parameter 인자가 많은 함수. 이해하기 힘들고, 사용하기 어렵다.
         하나의 클래스가 각각 다른 이유들로 인해서 다른 방식으로 자주 변경될 때.
         다른 클래스들이 바뀔 때마다 매번 수정되는 부분.
          * 바뀌어야 하는 경우들을 명확하게 한뒤 ExtractClass 하여 하나의 클래스에 모은다.
         하나의 변화에 의해 다른 여러 클래스들의 변경 필요시
          * 바뀌는 부분들에 대해 MoveMethod, MoveField 하여 하나의 클래스에 넣는다. (없으면 새로 하나 클래스 생성할것)
         어떤 메서드가 자신이 속해 있는 클래스의 데이터가 아닌 다른 클래스의 데이터들을 필요로 할 때.
         클래스의 변수선언 필드나 함수 프로토타입 같은 곳에 있는, 항상 같이 몰려다니는 데이터 아이템들
         거의 쓸모없는 클래스.
          * 추상클래스들이 별로 하는 일이 없을때 - CollapseHierarchy
         사적인 부분(?)에 대해서 지나치게 관심을 기울이는 위험한(?) 클래스들.
         필드, getter, setter만을 가진 어린아이와 같은 클래스.
         서브클래스가 부모의 behavior는 재사용하나 부모의 인터페이스를 지원하기를 원하지는 않을 때.
  • 새싹교실/2012/Dazed&Confused . . . . 22 matches
          * 소라 때리기 게임을 만들었다. 직접 소스코드를 입력하면서 소스코드의 쓰임을 익혔다. getchar(getch로 하다가 Visual Studio에서 즐 날려서 이걸로 대체)함수와 rand 함수를 배웠다. ppt를 통해 함수의 쓰임을 알아 볼 수 있어 좋았다. - [김민재]
          * define, rand, srand, 다양한 헤더파일을 처음 써 보았다. 내가 혼자서 다시 해 봐야겠다. 신기했다. 이렇게 다양한 함수를 알게 되어 좋았지만 조금 더 집중해야 할 것 같다. 이번 강의에서는 실습이 적었는데 실습과 직접 프로그래밍을 해 보는 시간을 가졌으면 좋겠다. - [박용진]
          * 드디어 반 아해들이 맨붕을 하기 시작했습니다. 뭐 놀라운 결과도 아니지만,, 직접 보니 ...하네요. 이번에도 ppt를 열심히 복붙해서 나누어 줬습니다. 그렇게 하나하나 알려주다가 포인터부터 조금씩 힘들어 하더니 재귀함수 부분에서 실습을 원하길래 피보나치를 짜 보라고 시켰습니다. 표정들이 맨붕 복탄을 맞은 것 같더군요. 음... 그래서 결국 준비한 부분은 다 못 나갔습니다. 다음에 이어서 해야겠네요. 4주차 내용이 끝나면 한번 전반적으로 실습 위주로 시켜야 겠습니다. - [권순의]
          * Pointer, 재귀함수, 메모리 등 많은 것을 배우는 시간이었다. 그러나 이 모든 것들이 다 새로운 것이다 보니 심하게 맨붕을 경험하게 되었다. 다음에 차근차근 복습하는 시간을 가져야 겠다.
          * 포인터와 구조체, 전역 번수와 지역 변수에 대해 배웠고, 포인터가 어느 곳에서나 자료를 읽을 수 있다고 하는 것과 Call-by-Value, Call-by-Reference에 대해서도 배웠다. 포인터에 대한 개념은 알고 있었지만 깊게는 알지 못했는데 오늘 새싹으로 많은 것을 배울 수 있었다. 그러나 이 모든 것들이 하루만에 끝내려고 하다 보니 너무 부담스러웠다. 조금 더 다양한 프로그래밍 예제에 대한 경험을 했으면 좋겠다. - [김민재]
          * 포인터, 재귀함수, 피보나치 수열을 코딩해 보았다. 피보나치는 하다가 실패했지만 자주 코딩을 해 보면 슬슬 감이 올 것 같다. 재귀함수의 return에 대한 개념이 흐려서 아직 재귀함수를 잘 못 쓰겠다. 연습을 자주 해야겠다. Practice makes Perfect?.. 포인터에 대한 개념이 흐렸는데 어느 정도 자리를.. 개념을 잡은 것 같다. 머리 속에서 코딩이 안 되면 펜으로 수도 코드작성이나 수학적으로 해설을 먼저 작성하는 연습을 해 보아야겠다. 강의에서 좀 더 코딩 연습이나 연습 문제 풀기와 같은 것이 많았으면 좋겠다. 단순히 따라적기만 해서는 잘 이해가 안 되는 것 같다. - [박용진]
          * 오늘 강의는 지난 주 내용을 복습하는 것 위주로 진행되었습니다. 그래도 한 번 했던 내용이라 저번 주 보다는 이해하는 정도가 다르더군요. 그래서 다시 한번 재귀함수를 통한 피보나치 수열을 짜 보게 했습니다. 저번 주 보다는 그래도 나은 결과를 보여주었습니다. 그래도 지속적으로 반복 학습 시켜야 할 듯 싶습니다. 그와 동시에 실습도 여러번 필요 할 듯 하군요.. - [권순의]
          * 함수, 재귀함수, 배열, 메모리 주소, 포인터 등을 복습하였다. 지난 주에 이해되지 않았던 부분에 대해서 상세히 설명해 주셔서 좋았다. 직접 피보나치 수열을 작성해 보면서 재귀함수의 사용을 익힐 수 있어 좋았다. - [김민재]
          * 오늘 다시 복습을 했다. 복습을 하며 특히 저번에 재귀함수를 못 했었는데 오늘 다시 공부하여 재귀함수를 이용해 피보나치 수열을 짤 수 있어 좋았다. 앞 부분도 조금 더 실습을 많이 했으면 좋겠다. - [박승우]
  • DPSCChapter3 . . . . 21 matches
          연관된 혹은 의존적인 객체들의 집합을 만들기 위한 인터페이스를 제공한다. 클라이언트가 구체적인 클래스들에 대한 구체화
          Ford parts,Toyota parts,Porsche parts 등등이다. 유사한 클래스들이 클래스 구조를 통해서 확장된다. 각각이 적당한 하위
          된 여러 종류의 클래스들 중 하나를 선택할 수 있도록 해주는 것을 의미한다.
          우리는 아래와 같은 자동차와 자동차 부분들의 클래스를 가지고 있다.
          Vechile과 CarPart는 Object 클래스의 서브 클래스이다. 물론, 이 클래스 구조는 많은 단계에서 전체적으로 단순화된다.
          우리는 CarPartFactory라는 추상 팩토리 클래스 정의를 하면서 패턴 구현을 시작한다. 이것은 "구체적인 클래스들에 대한
          클래스이다. 그것은 추상적인 상품 생성 함수들(makeCar,makeEngine,makeBody)을 정의한다. 그 때 우리는 상품 집합 당
          하나의 구체적인 팩토리 하위 클래스를 정의한다. 각각의 하위 클래스들은 적당한 부분을 만들고 반환하기 위해서 상품 생성
          함수를 재 정의한다. 그래서 우리는 Object를 상속한 새로운 하위 구조를 추가한다.
          자동차 부분(part) 생성 메쏘드를 구현하기 위해서, 우리는 추상 팩토리 클래스로 시작한다.
          그리고 이 메쏘드를 오버라이드하는 구체적인 하위 클래스를 추가한다.
          아직, 확실하지 않는 한 부분이 있다. CarAssembler는(factory 클라이언트) 어떻게 구체적인 CarPartFactory 하위 클래스의 인스턴스를 얻을 수 있을까? 그것은 특별한 하위 클래스 자체를 소비자의 선택에 기초해서 인스턴스화 할 수 있을 것이다. 혹은 외부 객체에 의해서 팩토리 인스턴스를 다룰수도 있을 것이다.
          하지만, 두 경우에 자동차를 생성하기 위한 코드와 그것의 컴포넌트 하위 부분은 여전히 같다. 즉, 모든 CarPartFactory 클래스들은 동일한 메시지 프로토콜을(다형성)을 구현하기 때문에, 팩토리 클라이언트는 팩토리 타입이 무엇인지 상관하지 않고 호출을 할 수 있다. 그것은 단지 팩토리 프로토콜에 의해 제공되는 일반적인 메시지를 전송한다.
          ABSTRACT FACTORY 접근은 좀더 모듈적이고, 좀더 쉽게 확장 가능한 디자인을 할 수 있다. 시스템에 새로운 타입의 자동차를 추가하기 위해서, 우리는 CarPartFactory의 서브 클래스
  • 날다람쥐 6월9일 . . . . 21 matches
         = 포인터(Pointer)에 대해서. =
         포인터란?
         포인터란, 어떤 변수의 '주소'를 참조하는 변수이다. 예)
         포인터는 *라는 문자를 통해서 표현하는데,
         예를 들어 int *ip, i; 이렇게 하면 뒤의 i는 일반적인 int로, 앞의 ip는 포인터 INT형으로 선언이 된다.
         포인터가 가리키는 곳의 값을 쓸 때는 앞에 *을 붙인다. 예) int a = 13; int* ap = &a; printf("%d %d", a, *ap);
         하지만 포인터를 왜'쓰는지 잘 모르는 경우가 많다.-_-;
         함수 내에서 값을 아무리 바꿔봤자 지역변수 의 내용은 바뀌지 않는다. 이것을 어디서나 쓸 수 있게 하기 위해서.
         *cp = a + b; // cp라는 포인터가 가리키는 주소의 값을 a + b로 바꿔준다(main 함수 안의 c).
         = 배열과 포인터 =
         = 포인터를 이용한 간단한 프로그램 =
         이름과 반을 3개 입력받고 포인터를 이용해서 edit라는 함수 안에서 2번째 입력받은 사람을 수정한 후 다시 출력하기. 예) 유정석 1
         = 배열의 이동을 포인터로?! =
         배열의 이동을 포인터로 :
         포인터를 이용한 간단한 프로그램 :
          scanf("%s %d", NameC, NumC);// 포인터이므로 '&' 를 붙이지 않는다.
          NameC = Name2;//배열도 일종의 포인터이므로 Name2 앞에 '&' 을 붙이지 않는다.
          NumC = &Num2;//Num2는 포인터가 아니므로 '&' 을 앞에 붙여야 한다.
          edit(NameC, NumC);// NameC 와 NumC, 즉 주소를 edit함수로 전달.
  • 새싹교실/2011/씨언어발전/4회차 . . . . 21 matches
         * 함수의 사용법(함수의 오버로딩)
         * 리턴값이 없는 함수
         * 재귀함수
         * 함수의 장점
         * 함수의 사용법(함수의 오버로딩)
         * 리턴값이 없는 함수란?
         * 재귀함수란?
         * 함수의 장점은 무엇인가?
         함수의 장점 : 복잡한 함수를 여러번 쓸필요없이 한번 정의하여 불러와 쓸수있고 코딩이해에 도움이된다.
         재귀함수함수안에 자기함수를 써서 계속 불러다 계산한다.
         리턴값이 없는 함수는 >> void f() 요런거 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
         수업시간에 자서 못들었던 함수에 대한 내용과 지역변수 전역변수 static 변수 를 배웠다.
         봉봉교수님의 마성의 목소리를 들어 잠의 세계에 빠졋는데 static 변수는 지역함수와 비슷한 것인데 값이 날라가지 않는다는 것이 특징이다.
         오늘은 switch 함수를 응용하여 1을 입력하면 더하고, 2를 입력하면 곱하고, 3을 입력하면 나누는 코딩을 해 보았다.
         재귀함수를 배우면서 factorial 함수를 만드는 방법도 배우고
  • Gof/Mediator . . . . 20 matches
         다른 다이얼로그 박스들은 도구들 사이에서 다른 dependency들을 지닐 것이다. 그래서 심지어 다이얼로그들이 똑같은 종류의 도구들을 지닌다 하더라도, 단순히 이전의 도구 클래스들을 재사용 할 수는 없다. dialog-specific dependency들을 반영하기 위해서 customize되어져야 한다. subclassing에 의해서 개별적으로 도구들을 Customize하는 것은 지루할 것이다. 왜냐하면 많은 클래스들이 그렇게 되어야 하기 때문이다.
         director가 리스트 박스와 입력 필드 사이의 조정하는 방법을 요약하자. 도구들은 서로 단지 간접적으로 director을 통해서 통신한다. 그들은 서로에 대해서 몰라야 하며, 그들 모두는 director를 알아야 한다. 게다가 행위는 한 클래스에 지역화 되어지기 때문에 행위는 클래스를 확장하거나 교체함으로써 변하거나 바꿔질 수 있다.
         FontDialogDirector 추상화가 클래스 library를 통하하는 방법은 다음과 같다.
         DialogDirect는 다이얼로그의 전체 행위를 정의한 추상 클래스이다. client들은 화면에 다이얼로그를 나타내기 위해서 ShowDialog 연산자를 호출한다. CreateWidgets는 다이얼로그 도구들을 만들기 위한 추상 연산자이다. WidgetChanged는 또 다른 추상 연산자이며, 도구들은 director에게 그들이 변했다는 것을 알려주기 위해서 이를 호출한다. DialogDirector subclass들은 CreateWidgets을 적절한 도구들을 만들기 위해서 override하고 그리고 그들은 WidgetChanged를 변화를 다루기 위해서 override한다.
          * 몇몇의 클래스들 사이에 분산되어진 하나의 행위가 많은 subclassing하는 작업 없이 customize되어져야 할 때.
          1. MediatorPattern은 subclassing을 제한한다. mediator는 다시말해 몇몇개의 객체들 사이에 분산되어질 행위를 집중한다. 이런 행위를 바꾸는 것은 단지 Mediator를 subclassing하기만 하면 된다. Colleague 클래스들은 재사용되어질 수 있다.
          1. 추상 Mediator 클래스 생략하기. 추상 Mediator 클래스를 선언할 필요가 없는 경우는 colleague들이 단지 하나의 mediator와만 작업을 할 때이다. Mediator클래스가 제공하는 추상적인 coupling은 colleague들이 다른 mediator subclass들과 작동학게 해주며 반대의 경우도 그렇다.
         우리는 DialogDirector를 Motivation에서 보았던 것처럼 font dialog를 구현하기 위해서 사용할 것이다. 추상 클래스 DialogDirector는 director들을 위한 interface를 정의 하고 있다.
         Widget 은 widgets들을 위한 추상 기초 클래스이다. 하나의 widget은 자신의 director를 알고 있다.
         FontDialogDirector 클래스는 다이얼로그 박스의 widgets사이에 중간이 위치한다. FontDialogDirector는 DialogDirector의 하위 클래스이다.
         기본적으로 FacadePattern은 클래스 집단이 있고, 그 클래스 집단을 사용하는 외부 클래스의 입장에서 필요한 패턴이고, MediatorPattern은 클래스 집단이 있고, 그 클래스 집단 내부에서 서로를 사용하기 위한 패턴이다.
  • JavaScript/2011년스터디/3월이전 . . . . 20 matches
          * with함수 사용시 발생할 수 있는 오류에 대해 알고싶다...(책에서는 생략함)
          * 레퍼런스로 함수를 직접 보면서 하니까 한눈에 들어와 좋았다
          * 최상위레벨의 범위와 함수의 정의
          이곳에서는 함수의 정의가 불가능 하다.
          * 자바스크립트에서 함수의 전달인자가 개수의 제한이 없다는 점
          * 함수가 데이터로써 사용될수 있다는점
          * 슈도 클래스함수로서 선언되기 때문인가?
          * Argument는 실행중인 함수의 정보를 정의한다 : 함수에 넘기는 파라메터가 유동적임..
          * 중첩된 함수는(내부 함수) 익명 함수이면안됨
          * 익명함수를 사용한 Dynamic programming
          * 함수 내부에서 arguments 객체에 함부로 접근할 경우 생길 수 있는 문제점
          * 함수 안에 익명함수 중복으로 쓸 경우 즉시 호출하거나 변수에 넣어 호출 가능하게 만들어야 한다.
          * 존 레식이 클래스를 구현한 코드를 보았다!!
          * 슈퍼클래스, 서브클래스화를 배웠다
  • OurMajorLangIsCAndCPlusPlus/stdlib.h . . . . 20 matches
         || NULL || 널 포인터 상수 값 ||
         || RAND_MAX || 랜덤 함수에 의해서 리턴되는 최대 값 (적어도 32, 767) ||
         || struct div_t || div() 함수에 의해 리턴되는 구조체형 ||
         || struct ldiv_t || idiv() 함수에 의해 리턴되는 구조체형 ||
          == 함수 (Functions) - String Functions ==
         || 함수 명 || 설명 ||
          == 함수 (Functions) - Memory Functions ==
         || 함수 명 || 설명 ||
          == 함수 (Functions) - Environment Functions ==
         || 함수 명 || 설명 ||
         || int atexit(void (*func)(void)); || 프로그램이 정상적으로 종료될 때 전달인자로 넘겨진 함수포인터를 이용해서 특정 함수 실행 ||
         == 함수 (Functions) - Searching and Sorting Functions ==
         || 함수 명 || 설명 ||
         == 함수 (Functions) - Math Functions ==
         || 함수 명 || 설명 ||
         == 함수 (Functions) - Multibyte Functions ==
         || 함수 명 || 설명 ||
         == stdlib.h 의 함수 예제 ==
  • ProgrammingWithInterface . . . . 20 matches
         언제나 개발을 할 때 '어라~ 같은 일 하는데? 이거 Base 클래스 만들어서 위로 올려야 겠는데?' 일말의 틈도 주지 않고 실행한다. 다형성을 사용하는 코드를 생성한다. '와우~! 한결 깔끔해 졌는걸?' 하지만 오산이었다. 시간이 지나서 먼가 추가할 동작들이 생겼다. 이제 고치기 시작한다. Base 클래스 부터... 고치고 나니 컴파일이 되지 않는다. 코드 수정의 여파가 하위 클래스들에게 까지 미친다. 정말 미친다. 이런 상속을 통한 계층 구조는 상위 클래스와 하위 클래스의 결합도를 높여준다. 지나 치게 크게..! 동감하지 않는가? 하나를 고쳤는데 수정할 꺼리가 마구 쏟아지는 상황을...
         상속을 사용하는 상황을 국한 시켜야 할 것같다. 상위 클래스의 기능을 100%로 사용하면서 추가적인 기능을 필요로 하는 객체가 필요할 때! .. 이런 상황일 때는 상속을 사용해도 후풍이 두렵지 않을 것 같다. GoF의 책이나 다른 DP의 책들은 항상 말한다. 상속 보다는 인터페이스를 통해 다형성을 사용하라고... 그 이유를 이제야 알 것같다. 동감하지 않는가? Base 클래스를 수정할 때마다 하위 클래스를 수정해야 하는 상황이 발생한다면 그건 인터페이스를 통해 다형성을 지원하는게 더 낫다는 신호이다. 객체는 언제나 [[SOLID|SRP (Single Responsiblity Principle)]]을 지켜야 한다고 생각한다.
         자 모든 값을 clear 를 사용해 삭제했는데 topOfStack의 값은 여전히 3일 것이다. 자 상속을 통한 문제를 하나 알게 되었다. 상속을 사용하면 원치 않는 상위 클래스의 메소드까지 상속할 수 있다 는 것이다.
         상위 클래스가 가지는 메소드가 적다면 모두 [오버라이딩]하는 방법이 있지만 만약 귀찮을 정도로 많은 메소드가 있다면 오랜 시간이 걸릴 것이다. 그리고 만약 상위 클래스가 수정된다면 다시 그 여파가 하위 클래스에게 전달된다. 또 다른 방법으로 함수를 오버라이딩하여 예외를 던지도록 만들어 원치않는 호출을 막을 수 있지다. 하지만 이는 컴파일 타임 에러를 런타임 에러로 바꾸는 것이다. 그리고 LSP (Liskov Sustitution Principle : "기반 클래스는 파생클래스로 대체 가능해야 한다") 원칙을 어기게 된다. 당연히 ArrayList를 상속받은 Stack은 clear 메소드를 사용할 수 있어야 한다. 그런데 예외를 던지다니 말이 되는가?
         자.. Stack과 ArrayList간의 결합도가 많이 낮아 졌다. 구현하지 않은 clear 따위 호출 되지도 않는다. 왠지 합성을 사용하는 방법이 더 나은 것 같다. 이런 말도 있다. 상속 보다는 합성을 사용하라고... 자 다시 본론으로 들어와 저 Stack을 상속하는 클래스를 만들어 보자. MonitorableStack은 Stack의 최소, 최대 크기를 기억하는 Stack이다.
         깔끔한 코드가 나왔다. 하지만 MonitorableStack은 pushMany 함수를 상속한다. MonitorableStack을 사용해 pushMany 함수를 호출하면 MonitorableStack의 입력 받은 articles의 articles.length 만큼 push가 호출된다. 하지만 지금 호출된 push 메소드는 MonitorableStack의 것이라는 점! 매번 size() 함수를 호출해 최대 크기를 갱신한다. 속도가 느려질 수도 있다. 그리고 만약 누군가 Stack의 코드를 보고 pushMany 함수의 비 효율성 때문에 Stack을 밑의 코드와 같이 수정했다면 어떻게 될 것인가???
  • Ruby/2011년스터디/세미나 . . . . 20 matches
          *함수조차 nilClass의 멤버함수
          * nilClass의 인스턴스는 nil하나, prototype은 없음. 다른 함수들은 가지고있음
          * 멤버변수도 객체, 객체안의 객체!
          * 루비에서는 클래스명이 대문자로 시작해야한다!(아니면 에러)
          * initialize 함수로 객체 선언하기
          * 멤버변수 선언하기(@)
          * 이미 생성된 인스턴스에 멤버함수 추가하기
          * 함수의 오버라이딩
          * 부모 클래스를 동적 변경하면, 자식 클래스의 인스턴스는 어떻게 될까?
          * 루비의 클래스/메소드 체이닝을 가르칠까요?
          * 루비의 함수는 () 생략가능!
          * 블럭을 이용한 반복자 함수
          * 아.. 세미나가 끝나니까 할말이 생각나네요..ㅠㅠ 루비의 블록 넘기기는 사실 블록이 yield구문에게 전달되는 것이 아니라 yield를 만나면 함수의 호출부로 컨트롤이 이동해 블록이 있는지 확인하고 실행합니다. 책에서는 co-routine 이라고 이해하면 된다는 설명이 있어요~ 블록이 전달되는게 아니라 컨트롤 플로우가 왔다갔다!! 스위치 태스킹처럼요. 세미나때 설명을 잘 해드렸어야 했는데 죄송천만번입니다 - [서지혜]
          * ''의도가 명확하다는 것''이 무엇인지 설명하는 것보다 의도가 명확하지 않은 상황을 제시하는 게 이해하기 좋을 것 같으니 하나 예를 들어볼게. RubyLanguage에서 괄호를 쓰지 않아도 되는 것은 if 구문에 대해서만 그런 것은 아니야. 함수의 경우도 마찬가지지. 만약 내가 매개변수 a와 b를 받아 그 둘을 더해 반환해주는 함수 add(a, b)를 만들었다 치자. 이 메서드를 다음과 같이 이용할 수 있겠지.
          * 스스로 찾아보시다니 좋은 자세이십니다. { |x| ~~ } 블록구문은 처음엔 잘 이해가 가지 않지만(지금도) 함수의 구현마저 동적인 루비의 장점이 잘 나타나 있는 부분이라 생각됩니다. - [서지혜]
  • 새싹교실/2012/ABC반 . . . . 19 matches
         1. 함수의 선언
         1. 함수의 선언
         함수는 분리 해 낼 수 있다.
         자기가 만들고 싶은 함수를 정의 해 주면 된다.
         int myfunction(int a, int b); 라고 하면 int 자료형을 반환하며 int자료형 2개를 파라미터로 하는 myfuction이라는 함수를 정의한 것이다.
         그 뒤 중괄호를 열고 함수의 몸체를 정의 해 주면 된다.
         위 코드에서 보면 myfunc라는 함수는 int자료형 자료 2개를 각각 num1과 num2라는 이름으로 넘겨 받아 두개를 더해서 반환한다.
         라는 코드에서 myfunc함수를 호출하며 a,b를 파라미터로 넘겨주고 있다.
         함수는 선언과 구현을 따로 분리 할 수도 있다.
         함수의 선언은 그 함수를 호출하는 코드보다 위에 있어야 한다. 그렇기 때문에 위처럼 함수의 선언만 해놓고 실제 구현은 아래에다가 해놓는 경우가 많다.
         int myfunc(int num1, int num2);는 myfunc라는 함수를 만들겠다고 선언만 해 놓은 것이다.
         라는 구문이 없으면 컴파일러는 함수의 구현이 없기 때문에 에러를 띄울 것이다.
         지역변수란 함수 내에서 선언해 놓은 변수이며 그 함수 안에서만 유효하다.
         전역변수란 함수 밖에서 선언한 변수이며 그 파일 전체에서 유효하다.
         order에 1을 입력받으면 add함수를 호출해 두 수를 더하고
         order에 2를 입력받으면 sub함수를 호출해 두 수를 뺍니다.
  • 새싹교실/2012/세싹 . . . . 19 matches
          - 즉, 소켓 프로그래밍도 해당 함수와 하위 함수들의 작동원리를 잘 모르더라도 어떤 기능을 하는지만 알면 쉽게 통신 프로그래밍을 할 수 있습니다.
          * 오피에서 숙제를 했습니다. VS로 하려니까 뭔가 막 오류가 나는데 고치지는 못하겠고 그래서 우분투를 깔아서 시도를 했네요. 용어가 익숙하지 않아서 그런지 함수 설명을 봐도 한번에 와닿지 않아서 힘들었습니다. 아 그리고 숙제를 하다가 생긴 문제인데요. 서버 프로그램을 처음 실행했을 때는 괜찮은데 두 번째로 실행했을 때는 Bind에러가 나네요. 그래서 매번 실행할 때마다 포트값을 수정해야했습니다. 왜 이런 문제가 생긴걸까요? - [권영기]
          * 자세한 해결 방법입니다. 소켓을 생성하고나서 바로 setsockopt(mySocket, SOL_SOCKET, SO_REUSEADDR, &anyIntegerVariableThatContainsNonZero, sizeof(anyIntegerVariableThatContainsNonZero)); 함수를 호출하면 이 소켓의 생명이 다하는 순간 해당 포트에 자리가 나게 됩니다. - [황현]
          * 데이터 처리에 대하여 좀 더 검색하였는데 기본적으로 send된 정보는 버퍼에 계속 쌓이며, recv가 큐처럼 버퍼를 지우면서 읽는다고 되어있었습니다. 반면 read와 같은 파일포인터 함수로 읽으면 버퍼를 지우지않고 파일포인터만 이동하는 것 같더군요. recv도 옵션을 변경하면 버퍼에 계속 누적해서 보관할 수 있는거 같습니다.
          * 스레드 실행 시점이 그때그때 달라서 값이 변하는 변수의 포인터를 인자로 주면 안되는군요. 그것 때문에 고생했습니다. - [김희성]
          * 채팅 코드를 보기 좋게 수정해봅시다. 힌트 - cpp 분할, 함수
          * CreateFile함수를 처음 사용하여보았습니다. - [김희성]
          * fopen의 경우 Standard함수인데 같은 input일 때, 리눅스에서 다르게 작동할지 궁금합니다. - [김희성]
          ReadFile은 파일포인터를 읽은 만큼 옮기던데 ReadSector에서는 옮긴 지점부터 섹터 단위로 세어서 읽는 건가요? 아니면 처음부터 다시 세어 읽는건가요? - [김희성]
          * 함수를 반복해서 실행해 보았는데 읽는 위치가 같은 걸 보아, 파일 처음 부분부터 단위를 세는 것이군요. - [김희성]
          * CreateFile함수 사용시 문자열이 LPCWSTR로 변환되지 않는 문제가 생기는 경우에는 CreateFileA를 사용해보세요.
          i=((int)(*((unsigned char*)MFT+21))<<8)+*((unsigned char*)MFT+20);//Offset으로 포인터 이동
          * 뒤집어 읽는 함수는 없고, 리틀엔디언을 빅엔디언으로 변환하는 함수는 있군요.
          point=((int)(*((unsigned char*)MFT+21))<<8)+*((unsigned char*)MFT+20);//Offset으로 포인터 이동
          클래스화 중, 읽을 수 있는 속성을 늘리는 중. (현재 기본 정보, 파일 이름, data 영역 읽기 가능)
  • CleanCode . . . . 18 matches
          * 클래스의 이름을 지을 때는 -info, -data와 같은 일반적인 이름을 쓰지 말라.
          * Account를 만들면 되지 AccountInfo라는 클래스를 만들 필요는 없다. Account 클래스 내부에 들어가는 정보가 Info니까.
          * 아래와 같은 식으로 Account내부의 정보를 하나로 묶으면 AccountInfo 클래스와 getAccountInfo()등이 있을법하지 않은가? -> 저런 구조 자체가 잘못됐을 수 있다. getAccountInfo()와 같은 방법이 아니라 다른 방법으로 일을 시키는 모양이 더 낫다.
          * 함수
          * 함수는 하나의 일을 하는게 좋다고 하는데 플래그를 쓴다는 것은 함수가 플래그의 값에 따라서 다른 값을 한다고 말하는 것이므로.
          * 차라리 다른 일을 하는 함수를 여러개 만드는게 더 낫다.
          * 함수 인자는 적을수록 좋다.
          * 함수 인자가 많아지게 되면 사용자가 인자들에 대해서 이해를 하기 힘들다.
          * 에러를 방지하거나, 처리하는 코드 때문에 함수의 본 임무를 파악하기 힘들게 되면 안됩니다.
          * callback 함수라는 것을 이용해서 작업이 끝났을 때 처리할 방법을 정할 수 있다.
          * 로그인 성공, 실패에 따른 callback 함수를 한 번에 넘기고 있다.
          * 현재는 callback 함수에 이름을 붙여서 인자에 넣고 있지만 주로 익명 함수를 쓰는 js의 특징이나 프로그래머가 직접 이름을 붙여서 관리를 해야 하는 등의 불편함을 고려하여 다른 방식으로 수정하고 싶다.
          * 각 callback 함수에 대한 의도가 보다 잘 드러남.
          * 자바스크립트에서 지원하는 apply 함수와 arguments로 함수의 인자값을 받아올 수 있는 것을 이용해 외부의 라이브러리 사용 없이도 간단하게 proxy를 구현할 수 있다. jquery-aop 등의 외부 라이브러리도 있다.
  • 새싹교실/2011/Noname . . . . 18 matches
          * 키보드로부터의 입력받기 : scanf함수
          * 함수 #define함수와 일반함수
          * 일반함수
          자료형 함수명(배개변수){
          함수몸체
          * #define함수
          * 연산자의 종류들과 #define함수의 활용법에 대해서 배웠습니다. 아직 C프로그래밍이 익숙지 않아서 간단한 함수도 어렵게 느껴졌다. 여러 예재로 우선 C프로그래밍에 익숙해 져야 겠다. 수업이 끝난 후 복습을 꼭 해야겠다. - [김창욱]
          * 함수만들기
          * 재귀함수의 사용
          * Factorial 함수만들기
          * 피보나치 수열 함수만들기
          * 하노이탑 함수 만들기
          * 재귀함수의 사용법을 익숙하게 하기 위하여 여러가지 예제를 풀어보았습니다. 처음 두가지 예제는 비슷해서 그런지 금방 끝냈는데 하노이탑은 힘들어 하더라구요. 저도 작년에 이 문제를 풀기위해 온갖 노력을 하다가 그때 선생님의 도움으로 간신히 풀었는데 그 기분이 짱이더라구요. 하노이탑까지는 꼭 풀고 다음을 배워야겠습니다. - [박정근]
          * 배열만을 공부하려니까 자꾸 포인터쪽으로 연결되네요ㅠㅠ 포인터는 나중에 따로하려고 했는데 배열을 하면서 같이 공부해야겠습니다. - [박정근]
  • 새싹교실/2011/무전취식/레벨7 . . . . 18 matches
         stack call은 어떤 함수가 불려졌을때 그 함수가 돌아오기 위해 스택에 자신이 불리어진 위치를 저장하는것.
         이진영 : 포인터는 너무 어려워용 ㅠㅠ <b>오빠가 너무 잘가르쳐줘서 감사해용<b>
         이소라 : 제가 왜 포인터를 포기했는지 알것 같아요. 이제 끝났다.
          * 이제 포인터라는걸 배웠는데 너무 어렵습니다. 주위 친구들은(능력자들) 미리 배워놔서 잘 쓰고 있다는 말을 들으니 너무 부러워요ㅋ. 인터넷에 보니까 포인터배열,배열포인터라는게 있더군요 이게 뭔 소린지ㅋㅋㅋㅋ 다 자기하기 나름이지만 계속해서 난이도가 높아지는 C프로그래밍이 무서워지기 시작합니다ㅋㅋ C과제도 점점 어려워지는데 자기스스로 한게 반정도 쯤? 나머지는 인터넷,선배님 찬스ㅋㅋ 방학동안에 C공부를 엄청나게 해야할것 같아요. 기말고사도 1달을 앞두고 있는데 중간고사때처럼 망치면 안되니까 열심히 복습을 해야겠습니다 - [서원태]
          * 포인터의 심화과정은 정말 길지. 그것의 기본 개념을 배웠다고 생각하면된다. 후기 먼저써준것 고맙다. 천릿길도 한걸음 부터라고 너가 하고있는 일이 하나하나 너에게 힘으로 돌아올꺼야. 그리고 인터넷을 찾고 선배들에게 물어보는것은 분명한 '검색'의 일종이다. 자주 찾아서 쓰다보면 너의 지식이 될꺼야. - [김준석]
          * 지난 시간 복습을 하고! 드디어 그 포인터라는 것을 들어갔습니다..학기초에 소라가 포인터 포인터@.@ 라고할때 그 포인터가 이렇게 일 찍 다가올 줄은 몰랐네요..ㅋㅋㅋ ㅠㅠ오빠가 잘 설명 해주셔서 대충은 알 것같아요 ㅎㅎㅎㅎ 하지만 꽉 잡고 싶어용! 앞으로 3년은 편해진다고 하시기에......ㅎㅎㅠㅠ 이제 첨 시작 한거니까 겁먹지 않을 테여요!! ㅎ ㅔ헹~~!복습을 마니 해서 좋아요!! - [이진영]
          * 우린 복습을 위주로 가르키지! 지식이란 좀 숙성되는데 시간이 걸리니까!!! 포인터를 가르치는건 매우 힘들지용 사람은 기본적으로 계산에 약해.. 그래서 연결되고 연결되고 연결되는 관계를 모르지용... 하지만! 계속 계속 포인터 써보다 보면 느는게 포인터 입니다! 이번 학기 말에는 MFC도 건들여보았으면 좋겠는데 말이지. -[김준석]
          내일 맛잇는거 사들고 갈게요 ㅠ 그나저나 포인터를 배웟군요... 어렵다 하아 -[강원석]
          * 저도 포인터를 포기한 경험이 있어서 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ못해요.... 앞으로 오빠한테 잘 배울게용...하하 천천히 가르쳐주세용>_< 배열선언하고 배열이름엔 배열이 시작되는 주소값이 들어간다는 것도 배웠어요. 이제 점점 더 어려워지겠죠..흑흑 걱정이 앞서여어어어 이제 소라찬스따윜ㅋㅋㅋㅋ -[이소라]
          * 그렇지.. 근데 기계적인 포인터의 개념은 어려운게 아니니까... 잘 가르쳐주마!! - [김준석]
  • 새싹교실/2012/AClass/4회차 . . . . 18 matches
         -이중포인터포인터의 주소값을 갖는 것입니다. 그거에 따라서 &c는 자기 자신 주소를 의미하는 것이고 c는 포인터 a의 주소값을 말합니다. *c또한 a의 주소값입니다 . &a는 a의 주소값, a는 a가 b를 가리키는 것이라면 b의 주소값을 말합니다.
         -해설 : 우선 int형 자료형을 가진 데이터의 주소를 가리키는 포인터로 a지정, b의 값에 5를 지정, 포인터의 주소를 가리키는 c를 지정하였다. a의 주소를 이중 포인터 c에 주었다. b의 주소는 포인터 a에 할당하였다. 그리고 이중포인터c에 값을 9로 주었다. 이것은 원래의 a의 주소값을 갖고 있던 c에 9를 대체해준 것이다. 따라서 프린트 *c,**c를 하면 a의 주소와 9가 출력이 된다.
         - c언어에서는 char,int,float 와 같은 많은 수의 기본 데이터 형과 배열, 포인터, 구조체 등의 유도된 데이터형으로부터 새로운 데이터형을 만들 수 있는데, 사용자 측면에서 새로운 데이터 형을 정의 할 수 있도록 typedef선언을 제공한다. typedef은 #define과 달리 이미 존재하는 c언어의 데이터 형만을 취하여 정의하고 typedef은 프리프로세서에 의해 처리되는 것이 아니라 c컴파일러에 의해 처리된다. 또한 #define보다 다양한 형태의 치환이 가능하다.
         9.2중포인터를 이용하여 3x3행렬을 두개 만들고, 두 배열의 합을 출력하는 프로그램을 짜보세요.
         //10.LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다.
         - 데이터를 넣을 Name이라는 변수와 다음 노드를 가리킬수 있도록 하는 Next포인터 변수를 선언했다.
         9. 2중포인터를 이용하여 3x3행렬을 두개 만들고, 두 배열의 합을 출력하는 프로그램을 짜보세요.
         LinearSearch를 구현해보세요. 배열은 1000개로 잡고, random함수를 이용해 1부터 1000까지의 숫자를 랜덤으로 배열에 넣은 후, 777이 배열내에 있었는지를 찾으면 됩니다. 프로그램을 실행시킬 때마다 결과가 달라지겠죠?
          struct Node *NextNode; //다음 노드에 대한 포인터
         NODE* 를 반환하는 CreateNode다. NewNode라는 포인터를 생성후 그 해당하는 주소에 malloc함수로 공간을 할당하고 있다.
         Malloc으로 할당한 공간은 해당 함수가 끝나도 해제되지 않는다. 이건 속성이 다른 메모리 공간에 할당 했기 때문이다.(?????)
  • 새싹교실/2012/우리반 . . . . 18 matches
          * 오늘은 태진이형이 내주신 과제를 같이 해보면서 printf와 scanf 자료형 temp if else if를 섞어가며 각각의 함수를 알아보았다. 헷갈리는건 아직 마찬가지지만, 훈련하면 나아질거라고 생각한다. c언어는 정말 규칙이 많은것 같다. 집에서 코딩연습이 필요하다고 생각했고, 여러 규칙지키면서 해야하겠다 ㅋㅋ -[권도현]
          * [권도현] - switch, while, for을 배웠습니다. 어려워서 정신을 못차리겠어요 ㅠㅠ 열심히 연습해볼게요 ㅠㅠ ;랑 괄호 주의해야겠습니다. 많은 함수가 아직도 낯설어요.. 코딩 정말 어렵네요..
          * 함수에 관하여. scope ( 지역변수, 전역변수), 매개변수.
          * 심화로 재귀함수에 대하여.
          * do-while, 함수, return, scope, {}
          * 점심약속 빨리 끝내고 와서 오늘은 함수를 배웠다. int main()이런 함수를 연달아 써서 함수간의 연결이나 끊김같이 조금은 복잡한 것을 배웠다. 아직 구성이 눈에 않익어 힘들지만 이해가는 부분도 꽤 있었다. 원래 하는날이 아닌데 해주신다고 하신 태진이형 감사합니다 ^^ -[권도현]
          * [이미경] - 함수에 대해서 배웠다. 재귀함수도 배웠는데 너무 어려운거 같다 ㅠㅠ 자꾸 부르고 또 부르고 해서 결과를 예측할 수 없었다 ㅠㅠㅠ do while이랑 << 도 배웠는데 <<할 때 2진수까지 생각해야해서 화났다.
          오늘은 scope를 배웠다. 함수안의함수 구조가 단순했지만 코드를 처음써보니 어렵게 느껴졌다. 서치, 함수안의함수 스코프 수업시간내에서 배웠지만 기억이 나질 않았다. ㅠ 앞의수업 코딩연습을 하면 뒤수업이 나가고 이게 반복되서 자꾸 못하는거같다. 먼저것, 뒤에것 같이 코딩연습을 해봐야 겠다. -도현-
          * 함수와 배열을 배웠다. 배열 쓸 때 0부터 시작하는 걸 잘 기억해야겠다. 중간고사 끝나고 처음 수업 했더니 예전에 배웠던 게 헷갈려서 당황스러웠다. -[미경]
          * 구조체??, 2중포인터??
          * 포인터
          * 저번 시간이랑 이번 시간 두 번에 걸쳐서 포인터에 관한 내용을 배웠는데 코드를 보면 그 당시에는 이해하는데, 다시 직접 해보려니 헷갈린다ㅜㅜ 혼자서 많이 연습해봐야 할 것 같다. 또 동적 할당에 대해서도 배웠는데, 배열과 비슷해서 이해하기 좋았다. 마지막 수업이라 뭔가 아쉽지만.. 한 학기동안 잘 가르쳐주셔서 C 수업 따라갈 수 있었던 것 같다 ^ㅡ^ -[미경]
  • 새싹교실/2012/해보자 . . . . 18 matches
          - 나중에 함수 배울때 다시 배웁니다.
          2. swap(int num1, int num2)함수를 구현하시오. 함수 호출을 배우지 않았기 때문에, 그리고 포인터를 아직 배우지 않았기 때문에 기본적인 코드를 제공합니다.
          * 함수는? 수학에서의 함수와 동일한 개념. 매개변수를 넘겨주면 결과값이 나온다!
          - 결과값: 함수의 자료형, 즉 반환형
          - 함수의 반환형은 변수의 자료형과 같이 쓰면 된다.
          - void형은 반환하는 값이 없는 함수다.
          * int main()함수에서 return 0를 하는 이유: 메인 함수는 0을 반환하면 프로그램이 끝났다는 것을 알린다.
          - void main()은 메인 함수가 아니다!
          * 함수의 선언: 컴파일러에게 '이런 이런 함수를 쓸것이다'라고 알리는 것.
          * 함수의 정의: 컴파일러에게 '이런 이런 함수는 이런 이런 일을 한다'라고 알리는 것.
          * 함수의 호출: 함수에게 매개변수 등을 넘겨주어 결과값을 기다리는 것.
  • 5인용C++스터디/클래스상속 . . . . 17 matches
         == 클래스 상속 ==
         기존의 클래스 위에서 새로운 클래스를 생성할 수 있는 능력을 가르킨다.
         즉 어떤 클래스가 다른 클래스의 성질을 물려받는 것.
          사람 - 이름, 나이, 살고있는곳,... (기본클래스)
          직장인 - 직장명,월급... (서브클래스)
          학생 - 학생ID,... (서브클래스)
         == 예2)상속할 기본클래스 구축하기 ==
         private는 내부의 멤버함수에서만 엑세스가 가능, 즉 리스팅의 다른 부분에서는 데이터멤버나 값에 엑세스하는 것을 막는다.
         하지만 상속하려면 private값을 이 기본 클래스에서 상속한 클래스에서 직접 엑세스 한는 것을 혀용하고 싶을 것이다.
         이에 protected키워들를 사용해서 현재클래스와 상속하는 클래스에게만 엑세스를 허용한다.
         == 예2-1) 서브 클래스 추가하기 ==
  • Chapter I - Sample Code . . . . 17 matches
          OS에서 공유자원이나 특정코드가 수행되는 도중에 다른 프로세스에 의해 interrupt 되는것을 방지하기 위해 크리티컬 섹션을 사용하게 된다. 이는 윈도우즈 프로그래밍에서 스레드관련 처리를 해 줄 때에도 나오는 용어이다. uCOS-II에서는 단순히 매크로함수를 이용해 크리티컬섹션에 들어오기와 나오기를 한다. 매크로함수가 하는 일은 단순히 인터럽트를 무효화, 유효화 시키는것 뿐이다.
          수행시간 측정은 한 task 의 수행시간을 측정하기 위해서 한다. (당연한거 아냐?). 이 측정은 PC의 82C52 타이머 2번을 통해 수행된다. 수행시간 측정을 위한 함수로는 PC_ElapsedStart()와 PC_ElapsedStop()이 있다. 하지만 이 두 함수를 사용하기 전에 PC_ElapsedInit()를 호출해야한다. 이 함수는 두 함수와 관련된 오버헤드를 측정하는데 사용된다. 이렇게 하면 PC_ElapsedStop 함수에 의해 수행시간이 리턴된다(마이크로세컨드). 이 두 함수는 모두 리엔터런트(주 : 몇 개의 프로그램이 동시에 하나의 task나 subroutine을 공유하여 쓰는 것에 대해 말함, from 한컴사전) 하지 않아야한다. 다음은 PC_DispChar()함수의 측정시간을 구하는 예이다.
          uCOS-II는 여타의 DOS Application 과 비슷하다. 다른말로는 uCOS-II의 코드는 main 함수에서부터 시작한다. uCOS-II는 멀티태스킹과 각 task 마다 고유의 스택을 할당하기 때문에, uCOS-II를 구동시키려면 이전 DOS의 상태를 저장시켜야하고, uCOS-II의 구동이 종료되면서 저장된 상태를 불러와 DOS수행을 계속하여야 한다. 도스의 상태를 저장하는 함수는 PC_DosSaveReturn()이고 저장된 DOS의 상태를 불러오는것은 PC_DOSReturn() 함수이다. PC.C 파일에는 ANSI C 함수인 setjmp()함수와 longjmp()함수를 서로 연관시켜서 도스의 상태를 저장시키고, 불러온다. 이 함수는 Borland C++ 컴파일러 라이브러리를 비롯한 여타의 컴파일러 라이브러리에서 제공한다.[[BR]]
          '''uCOS-II를 끝내기 전에 PC_DOSSaveReturn 함수를 호출해야한다. 그렇지 않으면 DOS가 curruped mode 가 되어버리고 이것은 당신의 windows에 영향을 줄 수도 있다.'''
  • MFCStudy_2001/진행상황 . . . . 17 matches
          * 알게된점 또는 처음해본것 : 내가 만든 클래스 넣기,has-a 포함 이랑 더블 버퍼링이랑 2차원 배열 전달하기,강제 형변환의 위험성,
          lib파일 포함시키는 범,릴리즈 모드와 디버그 모드의 차이점,메인 윈도우의 포인터 얻어오기(CAlcaDlg *pDlg=(CAlcaDlg*)AfxGetMainWnd();)
          고친점 : 별로 없다. 비트맵을 멤버 변수로 넣었다.
          일단 클래스 별로 다 분류하긴 했지만.. 개별 멤버에 접근하려니까(3번째에서는 몽땅 리턴하는
          함수를 마니 만들었었다.) 함수 만들기도 짜증나고 해서.. 다 프렌트 클래스로 넣어 버렸다. 좀
          *1월 14일 : 공이 떨어지는 각도를 랜덤함수를 사용해서 일정하지 않도록 함, Stage 4, 5 그림
          *1월 14일 - 13일 일요일에 석천이형의 조언에 따라 코드 전체적으로 대대적인 Refactoring(이 용어가 맞는지는 모르겠네여..^^;;)을 해서 할수 있는 한 많은 코드들을 함수로 만들었습니다. 이에 따라 라인수가 아주 많이 줄어들게 되었고, 공격과 방어 인공지능을 같은 함수로 동작하게 하여 방어 할 수 있는 패턴은 모두 컴퓨터 공격할 수 있게 하였습니다.(덕분에 코드를 체계적으로 만들때는 상당히 힘들었지만, 한번 그렇게 하니 작업이 훨씬 쉬어 졌습니다. 참으로 중용한 사실을 몸소 체험 한거 같습니다) 3,4 방어 및 공격 인공 지능을 추가 했습니다. 이제 사람을 이길 확률이 좀더 높아 졌지만, 아직도 부족한것 같고 띈 3,3 방어 및 공격과 효율적인 3 만들기를 추가할 예정입니다.
          * 앞으로 더 할일(level3 공격 함수화, 띈 3,3 공격및 방어, 오목 알고리즘 문서화)
          * level3공격의 함수
          * 또 아주 가끔 생기는 버그들 수정 및 띈 3,3 공격및 방어 함수 작성시도..(아직 달성 못함)
          * 앞으로 더 할일 - 오목 알고리즘 문서화 및 띈 3,3 공격과 방어 함수 작성
          * 이전까지 - C++ 가상함수, 상속에 대한 개념을 공부하고 윈도우에서 그림그리는 원리를 알았습니다. ㅜ.ㅜ
          * 멤버 변수의 중요성을 깨닫고 있습니다. 참 유용하게 쓰입니다. -.-
  • MoreEffectiveC++/Basic . . . . 17 matches
          ps = &s2; // 그냥 포인터만 세팅하는 거다.
          지역함수 안에서 지역 객체를 생성하여 Reference로 리턴할 경우 지역 함수가 반한되면 지역 객체는 없어질 것이고, 리턴되는 Reference는 존재하지 않는 객체에 대한 다른 이름이 될 것이며, 경우에 따라서 컴파일은 될지모르나 나쁜 코드라고 하네요.-차섭-
          오해의 소지가 있도록 글을 적어 놨군요. in, out 접두어를 이용해서 reference로 넘길 인자들에서는 in에 한하여 reference, out은 pointer로 new, delete로 동적으로 관리하는것을 의도한 말이었습니다. 전에 프로젝트에 이런식의 프로그래밍을 적용 시켰는데, 함수 내부에서 포인터로 사용하는 것보다 in에 해당하는 객체 사용 코딩이 편하더군요. 그리고 말씀하신대로, MEC++ 전반에 지역객체로 생성한 Refernece문제에 관한 언급이 있는데, 이것의 관리가 C++의 가장 큰 벽으로 작용하는 것이 아닐까 생각이 됩니다. OOP 적이려면 반환을 객체로 해야 하는데, 이를 포인터로 넘기는 것은 원칙적으로 객체를 넘긴다고 볼수 없고, 해제 문제가 발생하며, reference로 넘기면 말씀하신데로, 해당 scope가 벗어나면 언어상의 lifetime이 끝난 것이므로 영역에 대한 메모리 접근을 OS에서 막을지도 모릅니다. 단, inline에 한하여는 이야기가 달라집니다. (inline의 코드 교체가 compiler에 의하여 결정되므로 이것도 역시 모호해 집니다.) 아예 COM에서는 OOP에서 벗어 나더라도, 범용적으로 쓰일수 있도록 C스펙의 함수와 같이 in, out 의 접두어와 해당 접두어는 pointer로 하는 규칙을 세워놓았지요. 이 설계가 C#에서 buil-in type의 scalar형에 해당하는 것까지 반영된 것이 인상적이 었습니다.(MS가 초기 .net세미나에서 이 때문에 String 연산 차이가 10~20배 정도 난다고 광고하고 다녔었는데, 지금 생각해 보면 다 부질없는 이야기 같습니다.) -상민
          // 해당 부모 객체의 포인터에 자식 객체가 가르켜 있으면 형변환이 가능하다.
          * Item 3: 절대로! 클래스 간의 다형성을 통한 배열 취급을 하지 말라
         이런 클래스를 선언했다. 그리고 다음과 같은 함수로 해당 클래스의 배열을 사용한다고 가정하자
         위의 두번째 호출의 클래스 상속의 다형적 성질을 이용한 함수 이용 즉
         자 위와 같이 객체의 지움을 담당하는 함수를 작성했을때 역시 문제가 있다.
          * '''첫번째 문제는 해당 클래스를 이용하여 배열을 생성 할때이다. . ( The first is the creation of arrays )'''
         생각해 보라 Virtual base class가 왜 기본 생성자를 필요로 하는가. 생성자를 만들어 놓으면 상속하는 이후 모든 클래스들에게 로드가 걸리는 셈이 된다. 근원이 흔들려 모두가 영향을 받는 사태이다. 만약? 수만개의 객체 생성이라면 이건 굉장한 문제가 될수 있다.
  • OurMajorLangIsCAndCPlusPlus/errno.h . . . . 16 matches
         ||4||int EINTR||가로채기 함수 호출;발생한 비동기 신호와 호출의 방해된 종료. 이럴 경우에 당신은 다시 호출을 시도해보라.||
         ||7||int E2BIG||인수가 너무 길다;실행함수에 의해서 실행되는 새로운 프로그램에 주어진 인수가 너무 큰 메모리 공간을 사용할 때.||
         ||14||int EFAULT||주소 오류; 유효하지 않은 포인터가 발견됨.||
         ||19||int ENODEV||디바이스의 특별한 정렬을 하는 함수에 주어진 디바이스가 잘못된 타입이다.||
         ||22||int EINVAL||적합하지 않은 인수. 이것은 라이브러리 함수에 잘못된 인수를 주는것과 같은 종류의 다양한 문제 를 지적하는데 사용한다.||
         ||32||int EPIPE||부러진 파이프; 다른 파이프의 끝에서 프로세스를 읽는 것은 불가능 하다. 모든 라이브러리 함수 는 SIGPIPE로 일반화된 에러코드를 리턴한다. 이 신호는 만약 처리되지 않거나 막아지지 않으면 그 프로그램을 멈추게 한다. 그러므로 프로그램이 처리되거나 블록된 SIGPIPE를 갖지 않으면 항상 EPIPE가 보일 것이다.||
         ||33||int EDOM||도메인 에러; 인수의 값이 정의된 함수를 지나 도메인에게 전달되지 않았을 때 수학적 함수에 의해 사용된다.||
         ||34||int ERANGE||범위 에러; 결과 값이 오버플로우나 언더플로우로 인해 표현되지 않을 때 수학적 함수에 의해 사 용된다.||
         ||39||int ENOLCK||유용한 락이 아니다. 이것은 파일 락킹 함수들에 의해 사용된다.||
         ||40||int ENOSYS||함수가 이행되지 않았다. 어떤 함수들은 정의된 옵션이나 명령들이 어떤것에서도 지원되지 않는 것이 있다. 만약 요청한 함수에서 이런 에러를 얻는다면 그것들은 지원되지 않는 것이다.||
         || ||int EINPROGRESS||비블록화 모드로 선택된 대상에 일으킨 완전하지 않은 오퍼레이션에 대해 발생. 어떤 함수들은 항 상 블록을 결코 리턴하지 않아야한다.||
         || ||int EOPNOTSUPP||당신이 요청한 그 오퍼레이션을 지원하지 않는다. 어떤 소켓함수는 소켓의 모든 타입들에서 이해할 수 없고 다른것들은 모든 통신 프로토콜을 충족시키지 못할 것이다.||
         || ||int EBACKGROUND||GNU 시스템에서 어떤 오퍼레이션의 호출자가 터미날의 전면처리 그룹에 없을 때 서버지원 프로토 콜에 이 에러가 리턴된다. 사용자들은 보통 이 에러를 보지 못하는데 왜냐하면 함수들은 SIGTTIN 이나 SIGTTOU신호로 해석하여 읽고 쓰기 때문이다.||
  • STL/vector/CookBook . . . . 16 matches
          * typedef으로 시작하는 부분부터 보자. 일단 반복자라는 개념을 알아야 되는데, 사실은 나도 잘 모른다.--; 처음 배울땐 그냥 일종의 포인터라는 개념으로 보면 된다. vector<int>::iterator 하면 int형 vector에 저장되어 있는 값을 순회하기 위한 반복자이다. 비슷하게 vector<Object>>::iterator 하면 Object형 vector에 저장되어 있는 값을 순회하기 위한 반복자겠지 뭐--; 간단하게 줄여쓸라고 typedef해주는 것이다. 하기 싫으면 안해줘도 된다.--;
          * for 부분을 보면 앞에서 typedef 해준 VIIT 형으로 순회하고 있는것을 볼수 있다. vector<T>의 멤버에는 열라 많은 멤버함수가 있다. 그중에 begin() 은 맨 처음 위치를 가르키는 반복자를 리턴해준다. 당연히 end()는 맨 끝 위치를 가르키는 반복자를 리턴해주는 거라고 생각하겠지만 아니다.--; 정확하게는 '맨 끝위치를 가르키는 부분에서 한 칸 더간 반복자를 리턴'해주는 거다. 왜 그렇게 만들었는지는 나한테 묻지 말라. 아까 반복자는 포인터라고 생각하라 했다. 역시 그 포인터가 가르키는 값을 보려면 당연히 앞에 * 을 붙여야겠지.
          * 우리가 여태까지 배운 거만 써보면 이렇게 고칠수 있다. 그 유명-_-한 동적배열이다.--; 아.. delete [] 저거 보기 싫지 않은가? c와 c++의 고질적인 문제점이 바로 저거다. 메모리 관리를 프로그래머가 해줘야 한다는거.. 자바 같은건 지가 알아서 delete 해주지만.. c나 c++에서 delete 안해주면.. X되는 꼴을 볼수 있다. (본인이 한번 경험해 봤다.) 그래서 잘 디자인된 클래스클래스 내에서 알아서 없애줘야 한다. 바로 vector를 쓰면 저 짓을 안해줘도 된다. 또 고쳐보자.
          * 그래서 pointer만을 이용해서 저장하자. 하지만 쓸모 없는 객체는 우리가 지워줘야 한다. 포인터를 넣어줄때에는, 컨테이너가 소멸될때는 포인터들은 지워지겠지만. 그 포인터들이 가르키는 값들은 지워지지 않기 때문이다.
          vector<Obj*> v; // 포인터를 저장하는 vector
          // 벡터에 Obj객체들의 포인터를 넣는다.
          * 노파심에서 말하는 건데.. 함수로 객체를 넘길때는 꼭 참조! 참조! 입니다. 값이 안 바뀌면 꼭 const 써주시구여. 참조 안 쓰고 값 쓰면 어떻게 되는지 이펙티브 C++에 잘 나와 있습니다.(책 선전 절대 아님) 복사 생성자를 10번 넘게 호출한다는 걸로 기억함.
          * 구조체에서 함수역시 가능하고, constructor, destructor역시 가능합니다. 다만 class와 차이점은 상속이 안되고, 내부 필드들이 public으로 되어 있습니다. 상속이 안되서 파생하는 분제들에 관해서는 학교 C++교제 상속 부분과 virtual 함수 관련 부분의 동적 바인딩 부분을 참고 하시기 바람니다.--["상민"]
  • ZeroPage_200_OK/note . . . . 16 matches
          * prototype은 클래스가 들고 있어야하는 함수들을 특정 인스턴스가 들고 있게 만드는 것이다.
         === 함수형 언어 ===
          * 함수를 일급객체로 다루는 언어
          * 함수를 마치 일반적인 인스턴스처럼 다루는 언어
          * 클로져 : 내부의 있는 외부에 있는 함수의 지역 변수를 쓸수 있는것. 때문에 의도하지 않은 결과를 가져올수 있다.
          * p.do() 에서 p가 실행문맥이다. 그러나 이 함수를변수로 받으면 var f = p.do; f(); 이런식으로 그러면 f는 실행문맥이 없기 때문에 전역객체가 실행문맥으로 간주된다.
          * 결론적으로 함수 앞 마지막 . 앞에 있는 것이 중요하다.
          * Class : 함수와 맴버 변수가 각각 class와 인스턴스에 나누어 져있는것.
          * prototype : 함수와 맴버 변수 모두 인스턴스에 저장되있는것
          * 단지 함수는 다른 인스턴스에 존재한다.
          * 실제 호출해야 하는 함수를 찾는 과정
          * 자바스크립트는 함수와 일반 변수와의 구분이 없기때문에 변수 또한 dispatch가 된다.
          * 따라서 callback함수로 해결한다.
          * 위와 같은 형식으로 내려줄경우 클라이언트(요청한 쪽)에서 _callback함수만 정의해두면 로딩이 끝남과 동시에 불리게 된다.
          * 이 응답은 마치 JSON에 함수만 감싼형식이기 떄문에 JSON with Padding, JSONP라 부른다.
  • 새싹교실/2011/쉬운것같지만쉬운반/2011.5.17 . . . . 16 matches
          * 배열 나가기 전에 포인터를 나가보았습니다. 변수와 포인터를 비교하며 가르쳐보았습니다. 그러다가 용운이의 질문 덕분에 *(애스터리스크) 연산자가 뜻이 모호하다는 것을 깨닫게 되었습니다. 왜 곱하기랑 주소참소를 구분하지 않았을까요? 의문이군요. 배열하고 포인터는 어차피 다른 개념이라, 기본적인 개념은 포인터를 먼저 가르쳐도 상관없네요. 앞으로는 포인터를 먼저 가르쳐야겠습니다. 왜냐면 맛있는 걸 먼저 먹어야 기분이 좋으니까요? - [박성현]
          * C 언어의 주요한 특징인 포인터를 배웠습니다!! 역시 포인터를 보면 반갑기도 하지만 반갑지 않기도 했습니다 ㅜㅜ. 역시 포인터는 사랑할 수 없는 대상이군요... 요태까지 날 미행한고야? ㅜㅜ
         포인터曰 "물논. 그리고 짜네가 또망가료는 굿또 알고잇치. 논 자유의 모미 아냐. 여태까지 그래 와꼬, 아패로도 개속!" - [장용운]
          * 포인터라는 것을 처음으로 배웠습니다. 으헣헣 알듯 말듯 하면서도 헷갈립니다. 그런데 이거 모르면 C바보로 살아가게 될 거 같습니다. 공부를 열심히 해야겠군요 - [송치완]
         1. 변수나 함수의 메모리 주소
         2. int 형 변수를 가리킬 수 있는 포인터 p의 선언
         4. 함수를 호출할 때 변수의 값을 전달하는 방식
         5. 함수를 호출할 때 변수의 참조를 전달하는 방식
          1.변수나 함수의 메모리 주소
          2. int형 변수를 가리킬 포인터변수 p를 선언합니다
  • 새싹교실/2012/나도할수있다 . . . . 16 matches
          * 3월 22일, 6피에서, 이현민이랑 추선준 성생님과 c를 visual studio를 이용해서 수업을 했습니다. 함수를 몇개 배웠습니다. for,while이 어려웠습니다. 집에가서 다시한번 해보려고 합니다. 아는게 없어서 다음에 뭘 해야 할지 모르겠습니다. - 신윤호 회고지
          * 소라때리기 게임에 이용된 함수 소개
          * 지난주에 수업했던 for,while의 복습으로 시작했다. 1부터 10까지의 합을 구하는 프로그램을 짜보라고 했는데 쉽게 하지 못하고 많이 버벅거렸다. 둘다 집에 비주얼 스튜디오가 없어서 복습을 안한 것 같다. 그리고 소라때리기 게이을 타이핑하게 하고, 소라때리기 게임에서 쓰이는 함수들을 설명해주었다. 그런데 한번에 너무 많은 양을 배워서 그런지 이해도가 떨어지는 것 같아서 다음주에 보충수업을 하기로 했다. 다음주 과제로는 MP를 추가해서 마법공격, 체력회복을 추가해오는것을 내주었는데 아마 안해올것 같다. -추성준
          * 시작하자마자 while로 1부터 10까지 더했다. 나는 버벅거렸다. 근데 조언을 구하면서 해봤다. 게임코드도 베껴써봤다. define은 메인함수 바껭서 하는 거라고 배웠다. select=getch() 이거가 좀 헷갈렸다. break가 나오면 멈춘다고 한다. 오늘 정말 여러가지를 배운거 같다. 때리기 게임안에 많은 함수가 들어있는게 신기했다. 복습도 좀 더 열심히 해야겠다. 집에 비쥬얼스튜디오도 깔고 스스로 하는 습관을 들여야겠다. -신윤호
          * 함수, 구조체, 배열, 포인터
         /* 함수 생성 (입력받은 숫자가 1인지 아닌지 판단하는 함수) */
         /* a,b 바꾸는 함수*/
          * 이번주도 굉장히 많은 내용을 배웠다. 함수, 구조체, 배열, 포인터를 가르쳐줬는데 역시 한번에 이해시키기란 쉽지 않은 것같다. 다음주에도 어김없이 보충수업을 해야겠다. 짧은 수업시간에 많은걸 배우는게 쉽지 않는데 지각,결석 하지않고 잘 따라와줘서 고맙다. -추성준
          * 오늘 너무 힘들다. 그냥 힘들다 내가 함수를 새로 만드는 걸 배웠는데 헷갈린다. 다 지친다.ㅠㅠ 잘 하고 싶다. 근데 해보라고 하면 난 아무생각도 나지 않는다. 도대체 어떻게 해야할지 모르겠다. 포인터라는걸 배웠는데 모르겠다. 다음주에 보충시간에 더 열심히 배워야겟다. -신윤호
          * 오늘 매우매우 많은것을 배웠다. 함수만드는법이랑, 배열이랑, 구조체랑, 포인터쓰는법을 배웠다. ㅋ 배우긴 했는데 머리에 들어있지는 않은것같다. ㅋㅋ 담주에 보충때 좀더 머리에 넣을수 있도록 노력해야겠다. ㅋㅋㅋㅋ 아 힘들다 ㅋㅋㅋ빨리 집에 가고싶다. ㅋ- 이현민
  • JavaScript/2011년스터디/서지혜 . . . . 15 matches
          * 중첩함수
          - 중첩 함수
          - 내부 익명함수는 접근할 수 없기 때문에 안됨
          * 함수 파라메터
          * 클래스 생성
         /* 클래스 만들기 */
          * 슈퍼클래스화, 서브클래스
         // 슈퍼클래스
          - 서브클래스화 1
         // 자식클래스 1
          - 서브클래스화 2
         // 자식클래스 2
          document.write("네임스페이스 안의 함수 테스트");
          document.write("네임스페이스 안의 함수 테스트");
  • TermProject/재니 . . . . 15 matches
          if (select == 1) menu1(); // 각 선택에 맞게 함수를 호출
          else error(); // 잘못 입력하였을 경우 에러메시지를 출력하는 함수 호출
          if (select >= 1 && select <= 3) // 서브메뉴의 선택에 따라 화면에 출력하는 함수를 호출
          sort(i, j); // 정렬 함수를 호출함
          prt_select(); // 선택된 서브메뉴에 따라 출력하는 함수를 호출
          avr(); // 평균 산출 함수를 호출
          avr(); // 평균 산출 함수를 호출
          for (int j = 0 ; j < i ; j++) // 정렬 함수를 호출하여 정렬함
         void sub_menu() // 1, 2번 메뉴의 경우 서브 메뉴를 입력받아 선택된 메뉴를 출력하는 함수
          error(); // 잘못 입력하였을 경우 에러메시지를 출력하는 함수 호출
         void avr() // 평균을 산출하는 함수
         void prt_all() // 3, 4번 메뉴를 선택했을 경우 공동으로 사용하는 출력 함수
          grade(i); // 학점을 산출하는 함수 포출
         void grade(int i) // 학점을 산출하는 함수
         void error() // 메뉴를 잘못 입력하였을 경우 에러 메시지를 출력하는 함수
  • 05학번만의C++Study/숙제제출/4 . . . . 14 matches
          * INT형을 만족하는 숫자를 입력하면 그 숫자를 저장하는 클래스를 생성되었다는 메시지와 함께 생성하라. 만약 입력된 숫자를 가진 클래스가 이미 존재할 경우에는 클래스가 가짖 숫자를 출력하고 해당 클래스를 삭제한다. 프로그램이 종료될떄에는 모든 클래스를 삭제한다. (단 숫자의 출력은 파괴자에서 해야한다.)
          * 생성되는 전체 클래스의 개수는 255개를 넘지 않는다고 가정한다.
         클래스가 생성되었습니다.
         클래스가 생성되었습니다.
         클래스가 생성되었습니다.
         1을 가진 클래스가 파괴되었습니다.
         3을 가진 클래스가 파괴되었습니다.
         클래스가 생성되었습니다.
         2을 가진 클래스가 파괴되었습니다.
         4을 가진 클래스가 파괴되었습니다.
  • AcceleratedC++/Chapter7 . . . . 14 matches
         #include "split.h" // 6.1.1. 절에서 만들어 놓은 함수
         // 기본적으로 split 함수를 이용하여서 단어를 tokenize 한다. 만약 인자로 find_url을 주게되면 url이 나타난 위치를 기록한다.
          기본인자(default argument)설정. 함수의 선언식에 매개변수로 = 를 할당하면 기본 인자로 등록된다.
          vector<string> entry = split(line); // split 함수를 이용해서 입력된 문자열을 ' '를 기존으로 tokenize 한다.
         //Recursive function call 재귀 함수의 이용
          ret.push_back(word); // 실제로 ret:vector<string> 에 값이 저장되고 재귀 함수가 끝이 나는 조건식이 된다.
          // <noun-phrase> 와 같이 연결된 문법이 <noun> 인경우에는 재귀적 함수 호출을 통해서 마지막 단어까지 내려간다.
          // 마지막 단어까지 내려갓을 경우 재귀 함수를 호출하고 bracketed = false 의 조건이 되기 때문에 재귀 함수가 종료된다.
          nrand(c.size()) : 7.4.4 절에서 설명함. pseudo rand 함수를 통해서 [0, c.size()) 의 범위를 갖는 가상적 임의의 수를 리턴한다.
          재귀함수의 호출은 반드시 함수의 내부에 재귀호출을 탈출 할 수 잇는 코드가 존재해야한다. 그렇지 않을 경우 stack_overflow가 발생한다.
          * n 이 작은 경우: rand()함수는 홀수 짝수를 번갈아 출력하는 성질이 있기 때문에 n이 2일경우 0과 1이 반복적으로 출력된다.
         || Hash Table || 각 키값에 대하여 해쉬 값을 제공해야함. 성능이 해쉬 함수에 크게 영향을 받음. 요소들을 원하는 순서대로 얻기 쉽지 않음 ||
  • DataStructure/Foundation . . . . 14 matches
          * 함수의 집합을 나타내는데, 세가지 표현방법이 있다. - Ο, Ω, θ
          * θ(f(n)) : 계수를 무시하고, 최고항이 정확하게 f(n)이 되는 함수들의 집합
          - log 함수는 base에 관계없이 같은 차수이다.
         // x의 n승을 구하는 함수.
          * 이 함수의 수행시간을 구하면 O(n)이 된다. 왜냐? 이 함수의 수행시간을 좌우하는 부분은 while문일것이다. while문에서 n번 도니까 O(n)이 되는 것...(맞나?--;) 그런데! 이 함수보다 생긴건 복잡하지만 효율이 좋은 함수를 만들수 있다.
         // x의 n승을 구하는 또다른 함수
          * 이 함수의 수행시간을 구하면 O(log2n)이 된다! 고등학교 때 배운 바에 의하면 n>log2n 이라는 전설이..--;(log뒤의 숫자 2는 밑입니다.)
          * 이 소스들을 예로 든 이유는 같은 기능을 하는 함수라도 효율성을 따져 가면서 만들면 좋다는..--; 겁니다..--;
          * 기본적으로 함수를 호출하는 것 자체가 하나의 Overhead이며, 재귀호출의 경우 계속 함수스택에 해당 함수코드부분이 쌓여나가는 것이므로, n 의 값이 커질 경우 메모리를 많이 이용하게 됩니다. 하지만, 재귀호출의 표현법은 일반 수열의 표현식을 거의 그대로 이용할 수 있습니다. 코드가 간단해집니다.
  • HardcoreCppStudy/두번째숙제/ConstructorAndDestructor/김아영 . . . . 14 matches
         - 생성자(Constructor) 클래스 이름과 같은 이름을 지닌 함수
         - 클래스의 객체가 생성될 때, 자동으로 호출
         {{{~cpp class 클래스이름{
          클래스이름( ){ } //생성자 함수정의
          //클래스 멤버 정의
         - 객체가 소멸될 때 수행해야 할 작업들을 위한 함수
         {{{~cpp class 클래스이름{
          ~클래스이름( ){ } //소멸자 함수정의
          //클래스 멤버 정의
  • HardcoreCppStudy/첫숙제/Overloading/변준원 . . . . 14 matches
         C++의 새로운 특징 중 하나인 디폴트 전달인자를 살펴보자. 디폴트 전달인자는 함수의 호출에서 대응되는 실제 매개변수를 빠뜨렸을 때 자동적으로 사용되는 값이다.
         전달인자 리스트를 가지고 함수를 사용할 때에는 디폴트 전달인자를 오른쪽에서 왼쪽의 순서로 첨가해야 한다. 즉, 어떤 전달인자의 값을 내정하려면 그 전달인자보다 오른쪽에 있는 모든 전달인자를 디폴트 전달인자로 해야 한다.
         8.7 참고-디폴트 전달인자를 가진 문자열 함수
         ◎ 함수의 다형성(함수의 재정의)
         다음은 함수의 다형성에 대하여 알아보자. 디폴트 전달인자는 개수를 변화시켜 가면서 같은 함수를 호출하게 했다. 함수의 다형성은 함수의 재정의라고도 하는데, 이는 여러 개의 함수가 같은 이름을 사용할 수 있게 해준다. ‘다형성’이라는 표현은 많은 형태를 가질 수 있게 해 준다.
         함수 재정의의 중요한 열쇠는 함수의 전달인자 리스트인데, 이것을 함수의 시그내처라고도 한다.
         8.8 참고-left() 함수의 재정의
  • LUA_4 . . . . 14 matches
         1. 함수
         오늘은 함수에 대해서 알아보겠습니다. 루아에서 함수도 하나의 객체(?)입니다.
         >a() -- 그러면 a 도 함수가 된다.
         이처럼 간단하게 foo라는 함수를 만들어 봤습니다.
         [ function 함수명() end ] 형태로 함수를 만들 수 있습니다.
         이제 매개변수를 넘겨서 반환값을 받는 함수를 만들어 보겠습니다.
         sum은 a,b 라는 매개 변수를 받아 a+b 연산을 한 후 반환해 주는 함수 입니다. 이제 좀 특이한 루아만의 가변 매개변 수, 복수 반환 함수를 만들어 볼까요?
         함수는 사용하기에 따라 변형할 수 있는게 많아서 천천히 다양한 방법을 설명하겠습니다. 대신 변수의 범위(scope)에 대해서 간단하게 예제로 살펴 보겠습니다.
         >> print (inside) -- 상위 함수의 local 변수에 접근 할 수 있습니다.
         local 이 없이 변수를 선언한다면 함수 밖에서도 값을 참조/변경 할 수 있습니다.
         변수 범위는 이 밖에도 다양한 이슈를 만들 수 있습니다. 예를 들면 do ~ end 문에서도 local 로 범위를 한정할 수 있고 function 자체도 변수와 같이 범위(scope)를 한정하여 사용할 수 있습니다. 또한 local을 사용하지 않으면 전역 범위 내에서 변수나 함수 자체를 접근/변경할 수 있습니다.
  • MicrosoftFoundationClasses . . . . 14 matches
         Microsoft Foundation Classes 를 줄여서 부른다. 기정의된 클래스의 집합으로 Visual C++이 이 클래스들을 가반으로 하고 있다. 이 클래스 군은 MS Windows API를 래핑(Wrapping)하여서 객체지향적 접근법으로 프로그래밍을 하도록 설계되어 있다. 예전에는 볼랜드에서 내놓은 OWL(Object Windows Library)라는 것도 쓰였던 걸로 아는데... -_-; 지금은 어디로 가버렸는지 모른다. ㅋㅋ
         MFC의 클래스들은 CDocument, CView와 같이 C로 시작하는 이름을 갖는다. 데이터 멤버들에는 m_ 라는 접두어를 붙여서 만들어져 있다. 변수의 이름앞에 p, i, l, h 등을 이용해서 그 종류를 변수의 이름으로 추정가능하게 하는 [헝가리안표기법]을 이용한다. 이는 과거 C환경하에서 형식 검사기능의 부재로 인한 에러를 막기위해 고안된 측면이 크기 때문에 C++에 들어와서는 반드시 필요한 표기법은 아니다.
         //WinMain() 함수는 MFC 의 클래스 안에 구현이 되어있기 때문에 API로 윈도우를 만들때보다 간편하게 작성하는 것이 가능하다.
         하나의 단위로서 다루어지는 프로그람안에 존재하는 프로그램 데이터의 레이블 정도로 생각하면 편하다. MFC에서는 이를 CDocument 라는 클래스로 제공하고 프로그래머는 이 클래스를 상속받아서 자기가 필요한 데이터형을 정의하고 그 데이터를 처리할 메소드를 작성하게 된다.
         View는 도큐먼트에 존재하는 데이터의 집합체를 우리가 원하는 방식으로 표현하는 메카니즘이 구현된 객체이다. document 와 마찬가지로 CView라는 클래스를 상속하여 사용하게 된다. View는 윈도우의 개념으로 보아서 프레임 윈도우 영역안의 클라이언트에 속하는 view만의 윈도우안에서 표현된다. 한개의 document 에 대해서 view는 여러개로 나누어서 만들어지는 것이 가능하다.
         Document 객체는 관계된 뷰들의 포인터를 리스트로 관리한다. 뷰는 관계된 도큐먼트에 대한 포인터를 저장할 데이터 멤버 변수를 갖고 있다. 프레임 위도우는 현재 활성화된 뷰 객체에 대한 포인터를 갖는다. 이런식으로 서로 묶여서 한개의 윈도우를 형성한다.
  • MineFinder . . . . 14 matches
         지뢰찾기 프로그램의 윈도우클래스 이름이 '지뢰 찾기' 였다. 윈도우 OS 의 특징상 해당 윈도우 핸들간 메세지의 발생에 따라 해당 윈도우프로시저에서 처리가 된다. 해당 윈도우 핸들은 윈도우 클래스 이름을 아는 이상 FindWindow 함수를 이용해서 찾으면 될 것이다.
          * [http://zeropage.org/~reset/zb/download.php?id=KDP_board_image&page=1&page_num=20&category=&sn=&ss=on&sc=on&keyword=&prev_no=&select_arrange=headnum&desc=&no=57&filenum=1 1차일부분코드] - 손과 눈에 해당하는 부분 코드를 위한 간단한 예제코드들 모음. 그리고 지뢰찾기 프로그램을 제어하는 부분들에 대해 Delegation 시도. (CMinerControler 클래스는 처음 '막 짠' 코드로부터 지뢰찾기 제어부분 함수들을 클래스화한것임)
          * 현재 열려있는 프로그램 중에서 지뢰찾기 프로그램을 윈도우 클래스 이름으로 찾아낸다.
         처음에는 전체에 대한 환경설정을 하게 된다. 기본적인 클래스는 다음과 같다.
         || CMineSweeper || 실질적인 두뇌에 해당되는 부분. CMinerController 와 CMinerBitampAnalyzer 를 멤버로 가지며, 이를 이용하여 게임상황분석, 지뢰찾기관련 판단 등을 한다 ||
         위의 결과를 보면, 가장 많이 호출되어 시간을 점유하는 것은 GetPixel와 PumpMessage이다. mfc의 함수와 윈도우 메세지드리븐 방식에 대해서는 수정할 수 없다 하더라도, 해당 함수에 대해서 호출 횟수를 줄이는 방법은 강구해야 할 것이다.
         즉, 저 함수들을 최적화 시키던지, 아니면 저 함수들이 호출되는 횟수를 줄여야 하는 것이다.
         목표는 Func time 이 많이 걸리는 함수들에 대해서 그 횟수를 줄이는 방법.
  • VendingMachine/재니 . . . . 14 matches
         == 클래스 나누기 ==
         이정도면 클래스를 나누는 것은 끝난 것 같으니깐 각각의 객체(클래스)에 필요한 역할을 나누어보자..^^
          * 클래스를 너무 많이 만들어서 괜히 복잡해졌다는 재동이 형의 지적을 받았습니다.[[BR]]
          아직 클래스 사용법도 제대로 모르는지라 서툴기도 하고.. 결론은 역시 공부해야할 것이 많다는 것...^^
          ''클래스 수가 많아서 복잡해진건 아닌듯(모 VendingMachine 의 경우 Requirement 변경에 따라 클래스갯수가 10개 이상이 되기도 함; 클래스 수가 중요하다기보다도 최종 완료된 소스가 얼마나 명료해졌느냐가 복잡도를 결정하리라 생각). 단, 역할 분담할때 각 클래스별 역할이 명료한지 신경을 쓰는것이 좋겠다. CoinCounter 의 경우 VendingMachine 안에 멤버로 있어도 좋을듯. CRC 세션을 할때 클래스들이 각각 따로 존재하는 것 같지만, 실제론 그 클래스들이 서로를 포함하고 있기도 하거든. 또는 해당 기능을 구현하기 위해 다른 클래스들과 협동하기도 하고 (Collaboration. 실제 구현시엔 다른 클래스의 메소드들을 호출해서 구현한다던지 식임). 역할분담을 하고 난 다음 모의 시나리오를 만든뒤 코딩해나갔다면 어떠했을까 하는 생각도 해본다. 이 경우에는 UnitTest 를 작성하는게 좋겠지. UnitTest 작성 & 진행에 대해선 ["ScheduledWalk/석천"] 의 중반부분이랑 UnitTest 참조.--["1002"]''
  • 데블스캠프2011/셋째날/후기 . . . . 14 matches
         == 김수경/방학이 끝나기 전에 알아야 할 구조체, 포인터, 파일 입출력 ==
          * 감회가 새로웠습니다. 교환학생 파견갔을 당시 자료구조 첫시간 과제로 받아 C++을 다시 기억해내고 클래스에 대한 개념을 다시 생각해내고 &와 포인터, C++에서의 객체 선언을 알아내느라 고생했던 기억이 납니다. 이번에도 &와 객체 선언부에서 잠깐 해맸었어요.(역시 반복학습이 중요한..) = 를 하나 빼먹어서 charAt 테스트에 통과하지 못했던 것은 아쉬웠습니다.
          * String 멤버 함수를 하나라도 더 짜보려는 무한경쟁의식이 급 생기는 바람에(문화상품권이 그렇게까지 필요하거나 탐났던 것도 아닌데) 주변 후배들을 별로 챙겨주지 못해서 아쉬웠습니다. 언제 한번 이후 정모 때 수경이가 String을 진행하지 않더라도 개인적으로라도 몇몇 후배들에게 실습을 시켜보고 싶어졌습니다.
          * 그리고 원래는 11학번이 있을테니 하나하나 같이 설명하고 짜보려는 생각에 함수 원형을 다 올리지 않고 이름만 올렸는데 그것도 좀 아쉽네요ㅠㅠㅠ
          * 내 String클래스는 어떻게 된걸까? 소멸자에서 메모리 해제를 안해주다니 썩은 클래스군ㅜㅜ
          * String은 자바를 사용할때 매우 빈번하게 사용하는 클래스라 직접 구현하는게 재미있었어요! 물론 귀찮고 어려워보이는건 넘어갔지만.............
          * String Class를 만들고 java에서 상용하는 것과 같이 String의 함수들을 짜는 시간이었다. 처음 class의 생성자를 만드는데에만 시간을 거의 다 썼다. 생각과는 다르게 많이 어려웠다. 생성자를 만들고 한두개의 함수들을 만들자 시간이 끝낫다. 프로그램을 작성하는데 익숙해 질 때쯔음 끝나서 아쉬었다. 나중에 String class 를 완성시겨봐야겠다.
          * 새내기가 없어서 hardCore coderace로 변해버린 C언어 코딩. String을 만드는건 너무 힘들었다. 하지만 이렇게 스피드하게 한건 너무 오랜만이라 재미있었다. C++ 스트링클래스는 정말 예외처리가 많고 하다가 중간 중간 완성된것이나 예외처리 테스트를 만들어놨으면 나중에 더 빨리했을까했는데 너무 오래걸렸다는것이 아쉬웠다. 여튼 수고한 당신에게 박수를. =
          * 그냥 값을 가지게 하는 식이라면 어떻게든 비슷하게는 만들겠지만 불변객체로 만들라는 부분이나 const 사용 등을 고려하려고 하니까 힘들어지네요. 게다가 함수도 몇 개 못만들고... -_- 평소에 쓰는 string 클래스의 고마움을 절실히 느꼈습니다.
  • 새싹교실/2011/무전취식/레벨4 . . . . 14 matches
          * 함수에 대해 설명했습니다.
          * 함수의 구조는 입력(Parameter), 내부 연산, 출력(Return)으로 설명했습니다.
          * 함수선언시 출력 타입(Return Type)에 따라 마지막에 반환해주는값 또한 같은 Type으로 반환해주어야합니다.
          select = getch(); //getch()는 char형 한글자를 받아주는 함수.
         강원석 : 어... 전반적으로 함수, 연산자에대서 배웠는데 함수가 뭐였는지...? 집에가서 빨리 게임 만들어볼께요.
         이진영 : 오늘 연산자랑 함수를 배웠는데~ 연산자는 쉬웠어요~~~ ㅋㅋㅋ 근데 함수를 배운건 모르겠어요. 게임은 생각보다 간단하게 만들어졌는데 그래도 어려워요. ㅠ.ㅠ
         이소라 : ㅠ_ㅠ저 랜덤함수모르는데 못배웠어여... 앞으로는 화요일에 팀플을 잡지않겠습니다. 죄송해요ㅠ_ㅠ 앞으론 안도망가고 열심히하겠습니다아아앙ㅎ_ㅎ 호하하하하하항
          * 어... 어라.... 아 이게 후기가 아니었군요..ㅠ_ㅠ 위에다 썻는데... 비요뜨+과자를 먹으면서 함수를 배웠어요. 랜덤함수도 배웠을텐데 저는 팀플하러 가서 못배웠어요 ㅠㅠ 다시 한번만 알려주세요.. 죄송.....☞☜죄송해요...ㅋㅋㅋㅋㅋ 그래도 수업 재밌어요! 사실 팀플에 안가고 싶었습니다..하핳... 앞으로는 진짜로 화요일에 팀플을 잡지않을게요!!! 히히 죄쏭해여....♥ - [이소라]
          * 히히 이번주는 연산자와 함수를 배웠습니다! 소라때리기 게임도 만들었구요...ㅎㅎ 3시간이나 했는데 생각보다 그렇게 힘들진 않았어요 배울때는요!...ㅋㅋㅋ끝나고 팀플하러 갔는데 골아 떨어졌었어요...ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 아무튼..연산자는 수업시간에 이어 두번째 배우는거라 괜찮았어요 히히 함수는 쫌 어려웠던거 같아요..기억이 잘 안나용....ㅎㅎ...ㅋㅋㅋㅋ 게임 만들기 할 때 ㅋㅋㅋㅋ첨에는 이해가 갔는뎅 점점 잘 안 됐어요...ㅎㅎㅎㅎ....ㅋㅋㅋㅋ 그래도 생각보다는 괜찮은거 같아요ㅠ.ㅠ....상대적으로...절대적으로는 아니에옄ㅋㅋㅋㅋㅋㅋ이해해보도록 노력하겠슴당 ㅠㅠ -[이진영]
          1. 이름바꾸기. +3점 <- 예습해야 할수 있는거임. 문자열 배열과 기타 함수.
  • 새싹교실/2011/무전취식/레벨8 . . . . 14 matches
          * 파일 입출력 : 파일 포인터를 이용해서 파일을 받아옵니다. 엽니다. 임시저장소에 넣엇다가 출력합니다. 파일을 닫습니다.
          * 왜 4번이 실행됬을까? => 파일포인터가 가르키는 파일 구조(struct)안에 답이있다 => 파일을 얼마나 읽었는지 저장하기때문이다.
         이소라 : 파일입출력을 처음 봤어요. 네.. 그걸 포인터로 쓰는지도 몰랐어요 잘 배웠어요. 근데 담주에 못할것 같아요.
         서원태 : 파일입출력을 봣는데 해보면 재밌을것 같다. 근데 구조체가 이해가 안되요. 포인터배열이랑 배열포인터랑 차이점이 뭔가요?
         강원석 : 파일입출력을 포인터로 배웠는데 포인터를 처음부터 배워야할것 같아요. 포인터랑 Array도 그렇고 할것이 많네요
          * 파일 입출력을 처음 보게되었는데 어려워도 해보면 정말 재미있을것 같아요. 여태 많이 봐왔던 파일들의 위치를 나태내어주던(주소창에 막 써졌던 것들)것에 대해 오늘 배운 파일 입출력에서 실체를 알게되었습니다ㅋ 포인터는 정말 중요한것 같아요. 반드시 여러번 이용해보면서 포인터에대해 익숙해 져야겠습니다. 그리고 저도 C관련 책을 하나 구해서 따로 자습을 해야 할것 같아요. - [서원태]
          * 음.. 포인터 없는 C란 존재할수 없지. 다음번에는 어떤 예제를 해볼까 두근두근 하구나. 원태 열심히는 하지만 이부분 외에도 다른부분에 신경써보면 좋겠어. 이시간에 집중하고 다른시간에 딴것을 해보렴. 다른것도 받쳐줘야 프로그래밍도 잘한단다. - [김준석]
          * 파일 입출력...을 배웠지요 저 나름 열심히 쳐다봤는뎅 잘 모르겟네욧.. 구조체란 것도..너무 생소 해요!! fgets도 ㅠㅠ 으아아악 모르는거 투성이가 나와버렸어요@.@ 제눈은 빙글 빙글..ㅋㅋ 음 저도 왠지 고등학교 때 html 잠깐 아주 조금 배웠었는데 이런것 한 것 같기두 해용..히히 저도 죄송하여요 선생님♥..오빠가 없었다면 전 C 찌질찌질 왕찌질이 였을꼽니당...ㅎㅎ 근데 지금 포인터때매 너무 혼란하네용 더 알려주세요>.< 복..습도 할꼽니당!! -[이진영]
          * 우왕=ㅂ= 귀엽게 써주었네~! 진영이 너무 귀엽다 ㅠㅠ 파일 입출력은 다음시간에 복습할겁니다. 이렇게 한번씩 생각해본다니 신난다!! 뭘해볼까!? 빠지지 말고 와야되요!!! 그리고 포인터에 대한 질문 고마워요. 뒤에 또 다시 복습 하겠습니다. 포인터는 중요하고 중요하고 중요한것이니까요. 아싸 신난다~! - [김준석]
  • 5인용C++스터디/멀티미디어 . . . . 13 matches
         MFC는 멀티미디어를 위한 별도의 클래스를 제공하지 않는다. Win32 API함수 차원에서 멀티미디어를 지원하기 때문에 MFC에서는 별도의 클래스로 만들어 놓지 않은 것이다.
         우선 사운드를 연주하는 API함수를 보자.
          PlaySound 함수를 사용하려면 mmsystem.h 파일을 먼저 include 해주어야 하고,
          앞서 만든 예제를 보면 PlaySound 함수는 사운드 파일 연주가 완전히 종료되기 전에는 리턴하지 않으므로 연주중인 동안은 어떤 일도 할 수 없다. 이런 방법을 동기화 방식이라고 한다.
          반대로 PlaySound함수가 연주를 시작해 놓고 곧바로 리턴하는 비동기 연주 방식이 있다.
          SND_LOOP 플래그를 지정하면 반복적인 효과음이나 배경음악을 연주하는 등의 설정을 할 수 있을 것이다. 연주를 중지시키려면 PlaySound 함수의 첫 번째 인수를 NULL로 하여 다시 호출해 주면 된다. 따라서, 오른쪽 마우스 버튼을 누르면 연주가 중지될 것이다. 주의할 것은 SND_LOOP 플래그는 반드시 SND_ASYNC와 함께 사용해야 한다. 만약 동기화 연주방식으로 반복연주를 하면 무한 루프로 빠져버릴 위험이 있다.
          리소스에 포함된 사운드를 연주하려면 PlaySound의 세 번째 인수에 SND_RESOURCE 플래그를 주고 첫 번째 인수에 리소스의 ID를 준다. 두 번째 인수에는 리소스를 가진 실행파일의 인스턴스 핸들을 주어야 하는데 MFC에서는 AfxGetInstanceHandle() 전역함수로 인스턴스 핸들을 구할 수 있다. 다음과 같이 코드를 작성해 보자.
          PlaySound함수는 메모리 크기의 제한을 받아서 1-2분 정도의 사운드 밖에 낼 수 없다는 점, Wave형태만 지원한다는 점, 연주과정에 사용자가 개입할 수 없다는 단점이 있다.
          MCI는 멀티미디어 요소에 대한 지원을 장치독립적으로 제공하는 일종의 라이브러리이다. 이것은 PlaySound 함수가 하지 못하는 여러 가지 일을 할 수 있지만, 사용 방법은 훨씬 더 복잡하다.
         MCIWnd 윈도우는 마우스 왼쪽 버튼을 눌르면 만들어진다. 그 전에 hWndAVI가 유효하면 먼저 MCIWnd를 닫는 작업부터 해주고 있다. MCIWnd를 만드는 함수는 MCIWndCreate 함수이다.
  • MFC/Print . . . . 13 matches
         출력을 구현하기 위해서는 view 클래스로 부터 상속받은 수많은 함수들을 오버라이딩 해야한다.
         = 프린트 로직과 관계된 함수들 =
          뷰클래스의 5개의 멤버함수는 프로그래머가 재정의 해야한다. 최소한 5개중에서 OnPreparePrinting(), OnPrepareDC(), OnPrint()는 구현해야한다.
          프린터 작업과 관계되는 모든 함수는 CPrintInfo 형의 객체 포인터가 인자로 전달된다. 이 객체는 프린터 작업을 관리하는 함수들을 연결시켜준다.
         모든 멤버 변수는 public 변수로 다음과 같다.
         || m_pPD || CPrintDialog 객체에 대한 포인터. 출력 대화 상자를 나타낸다. ||
         || m_lpUserData || LPVOID 형식을 갖는다. 생성한 객체에 대한 포인터를 저장한다. 출력작업에 관한 추가 정보를 저장하는 객체를 생성할 수 있도록 한다. CPrintInfo 객체와 연계 시킬 수 있도록 한다. ||
         ''기타 public 함수도 제공하다. 적기 귀찮다. MSDN 찾아보길;;''
  • PairProgramming . . . . 13 matches
          * 구현과제 : 데이타베이스 클래스(Database.inc)
         참고사항 : 몇몇 함수에 대해서만 TDD를 적용시켰다.
         나는 .NET의 System.Data의 구조를 보고 즉시 PHP에 적용시키고 싶어졌다. ASP.NET에는 SqlConnection , OdbcConnection , OleDbConnection을 제공해 준다. 이 클래스들을 잘 사용하면 DataTier의 종류가 바뀌어도 코드의 수정을 최소화 시킬 수 있다. PHP는 여러가지 종류의 데이타베이스 관련함수를 제공해준다. 어떠한 데이타베이스를 사용하느냐에 따라 동일한 기능을 하는 다른 이름의 함수를 호출해야만 한다.
         IConnection을 이용해 각각의 Connection에 대해 단일의 인터페이스를 제공하고 IConnection을 구현하는 MySqlConnection , SqlConnection , OciConnection을 만들자는 것이 나의 생각이었다. 파트너는 switch구문을 이용해 클래스의 상속 구조를 없애는 것과 비교해서 어떠한 이점이 있는가에 대해 질문했다. 이것은 장시간의 토론으로 이어졌다.
         하나의 클래스를 구현하고 구현된 하나의 클래스에서 switch로 호출되어야 하는 함수를 결정하면 된다는 것이었다.
         나는 일차적으로 switch코드를 없앨 수 있다는 점을 설명했다. 우리는 Connection클래스가 그다지 크게 바뀌지 않을 것이라는 것에 대해 동의했었고 이 점을 근거로 switch를 사용하는 것이 유지보수를 힘들게 하는가에 대해 질문했다. 솔직히 이정도 코드라면 누구나 수정할 수 있을 것이라고 생각한다. 그리고 그렇게 많은 시간을 필요로 하는 작업도 아니라고 생각한다. 파트너는 Connection을 생성하는 부분을 include 화일로 관리하고 그곳에 한번만 define문을 작성하면 문제가 없다고 주장했다.
         추가적으로 토론했던 사항 : Connection 클래스의 생성자에 매개변수로 데이타베이스 타입을 넘겨주면 된다는 것과 파생된 클래스를 생성하는 것
         긴 토론 끝에 파트너는 나의 의견에 동의했지만 만약 계속 이런 속도로 작업이 진행된다면 회사에서 가만있지 않을 것이다. (어제도 TDD를 사용했었는데 기존의 코딩시간에 비해 3배정도 더 늦어졌다. 그리고 다 끝내지도 못했고 무엇을 먼저 테스트 해야할지 갈팡질팡했었다. 처음부터 함수단위 테스트만 시도해야겠다는 생각이 원인같다.)
  • UnixSocketProgrammingAndWindowsImplementation . . . . 13 matches
         = 기본적인 함수/개념들 =
          fprintf(stderr, "socket 함수에서 에러"), exit(1);
          // bzero라는 함수도 있지만 초기에 0으로 채우는 것이 편하다.
          // SERVER_IP의 경우 문자열 포인터를 넣어야한다.
         = Server 가 될 프로그램에 필요한 함수 =
         = Client 가 될 프로그램에 필요한 함수 =
          ※ connect와 server 함수중 어떠한 함수가 닮았는지 이야기 해보자.
         = 정리에 필요한 함수 =
         = server/client 공통 - 입출력 함수 =
         ◎ UNIX 체계에서 사용하던 함수들의 헤더파일이 Windows 기반에서는 존재하지 않을 수도 있다.
         ◎ main() 함수 내부에
         // client의 요청이 오면 server는 accept() 함수로 요청을 받아들인다.
  • BasicJava2005/5주차 . . . . 12 matches
          - static은 클래스에 종속되는 변수로 인스턴스명이 아닌 클래스명으로 호출된다.
         2. Math클래스 와 기초클래스의 Wrapper 클래스
          - Math클래스에는 각종 함수와 상수들이 선언되어 있다.
          - 각종 Wrapper클래스(Integer, Double, Character...)
          - 클래스의 명을 쓰기가 귀찮을때.....
         6. 모든 예외의 상위클래스 Exception
          - 모든 예외는 Exception클래스를 상속받는다.
          throws : 이 함수에서는 예외처리 하고 싶지 않을때 사용한다.
  • CCNA . . . . 12 matches
          * 클래스A : 0xxx xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx형식(0.0.0.0~127.255.255.255)
          즉, 1.0.0.0~126.0.0.0은 클래스A(1~126)
          * 클래스B : 10xx xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx형식(128.0.0.0~191.255.255.255)
          즉, 128.1.0.0~191.254.0.0은 클래스B(128~191)
          * 클래스C : 110x xxxx.xxxx xxxx.xxxx xxxx.xxxx xxxx형식(192.0.0.0~223.255.255.255)
          즉, 192.0.1.0~233.255.254.0은 클래스C(192~233)
          //네트워크를 나타낼 땐 호스트 부분을 0으로 표현. 그리고 각 클래스에서 표현 가능한것의 제일 작은 수와 제일 큰수는 사용불가.
          *호스트부분이 모두0은 네트워크, 1은 브로드캐스트 번호이므로 사용하지 않는다. -> 각 클래스에서 사용가능한 최대 호스트수는 순계산-2해줘야함.
          * 각 클래스별 디폴트 서브넷 마스크
          * 클래스A : 255.0.0.0
          * 클래스B : 255.255.0.0
          * 클래스C : 255.255.255.0
  • CNight2011/고한종 . . . . 12 matches
          누님께 배열과 포인터의 기본, 주소에 의한 .. 뭐라고해야하나 암튼. 근본적으로 배열은 포인터와 동일. 이런것을 배웠다.
         배열이 근본적으로 포인터란 것은 이미 알고 있었으나 실제 컴파일러에서 이런식으로 표현 된다는 것을 배웠다.
         -> 포인터 연산자를 동원해서 표현하자면 &arr[0]이 된다.
         == 포인터 ==
         datatype* : 포인터 자료형 선언법 -> 이게 독자적인 자료형이라고 봐도 무관.
         *val_name : 해당 포인터변수가 가르키는 변수의 값을 참조
         &val : &연산자 우측의 주소값을 불러온다.(이건 val자리에 들어가는 변수가 포인터 자료형이 아니여도 됨)
         포인터 변수에 주소값이 저장된다고 생각하는것보다. 그 주소에 해당하는 변수를 가르킨다고 생각하는게 옳다.
         다중 포인터도 배웠다.
         한 '노드'에 의미가 있는 값과 다음 노드의 주소를 가르키는 포인터를 담는다.
         보통 끝은 Null을 가르키는 포인터가온다. 하지만 맨처음 노드를 가르켜 순환형 리스트가 될 수 도 있다.
  • DataStructure/List . . . . 12 matches
          * 리스트란 무엇인고 하니... 저장하고 싶은 데이터와 다음 데이터를 가르키는 포인터를 구조체로 묶은 노드를 기본으로 해서 막~ 연결시켜준 것이다.
          Node* Next_ptr; // 다음 데이터를 가르키는 포인터
         kkk->lalala=100; // kkk의 멤버 lalala에 100을 넣음.
         kkk->Next_ptr=hhh; // kkk의 멤버 Next_ptr이 다음 노드인 hhh를 가르키게 함
         hhh->Next_ptr=NULL; // hhh뒤에 아무것도 없으니 다음 노드를 가르키는 포인터를 NULL로 설정함
          * 위와 같이 다음 또는 먼저번 노드를 가르키는 포인터가 하나만 있는 것을 Single Linked List라고 한다.
          * 장점 : 빠르다. (배열 같은 경우는 중간에 하나 지우고 나면 그 뒤에껄 다 앞으로 땡겨야 한다. 수행시간 절라 오래 걸린다. 하지만 리스트는 다음 노드를 가리키는 포인터만 바꿔주면 된다.)
          * 단점 : 잘못된 포인터에 의한 Memory Leak 이 발생할 수 있다.
          /// 이부분에 메뉴를 넣든 함수 호출을 하든 마음대로..
         (자바의 Vector 클래스에서 이렇게 했다고 얼핏 듣어서...)
         //노드 클래스 모습과 인터페이스
         class Node { //Node 클래스
  • DebuggingSeminar_2005/DebugCRT . . . . 12 matches
         Debug C Runtime 클래스를 이용하면 라이브러리가 알아서 동적할당되는 메모리를 역추적하여 누수되는 메모리를 가늠하는 것이 가능하다.
         || _CRTDBG_CHECK_ALWAYS_DF || _CrtCheckMemory() 함수를 모든 new, delete 함수에 대해서 자동 호출 되도록 지정한다.[[BR]] 이 함수는 할당된 공간의 유효성을 지속적으로 체크한다. 즉 domainerror나 기타 메모리 access에 관한 부분을 검사한다. 대신 오버헤드가 상당하다. 그러나 그만큼 디버깅의 효율성을 높여줄 수 있다. ||
         = CRT 기타 함수 =
         CRT의 기본 함수들의 출력은 디버그 메시지 윈도우이다. 이를 변경하기위해서는 _CrtSetReportMode()라는 함수를 이용해서 출력에대한 일반 목적지를 지정하고, _CrtSetReportFile()를 이용해서 특별한 스트림 목적지를 설정해야한다.
          ''crtdbg.h는 ASSERT, ASSERTE라는 메크로 함수를 생성한다. 둘의 차이점은 ASSERTE는 assertion 표현을 보고하고, 다른 것은 하지 않는 다는 것이다.''
          ''두번째 인수는 파일 스트림의 _HFILE 형식의 포인터이거나 다음의 식별자들 중의 하나이다.''
         대체로 클래스에서의 메모리 유출은 동적 멤버 변수들이 만들어졌을 때 해야하는 '삼의 법칙'을 지키지 않는데서 비롯되는 경우가 많다.
          동적 멤버변수를 사용하는 경우에는 대입, 할당 생성자, 소멸자를 반드시 만들어야한다.
  • DesignPatterns/2011년스터디/1학기 . . . . 12 matches
          1. 처음엔 단순히 인터페이스 대신 넘겨받는 구체클래스를 써야해서인 줄 알았는데 상위기술이 하위기술에 의존하는 것이 아닌 하위기술이 상위기술을 지원하기 위해 만들어지는 것이라는것을 알게되었다.
          1. 멤버변수를 선언하면 꼭꼭 getter/setter를 만들었던 나를 반성...(나중엔 귀찮아서 public으로 한적도 있다지)
          1. 팩토리 메소드 패턴이 뭔지 잘 모르겠다. 기반 객체가 알지 못하는 파생 클래스를 생성한다니. 기반클래스는 원래 파생클래스를 알지 못해! 이말은 생성되는 파생클래스는 기반클래스를 '''반드시 확장해야 한다'''는 건가? 어려워.
          1. 자바 스윙의 코드 일부를 보니 알거같기도.. 코드에서 기반클래스를 확장하는 파생 클래스가 아니라 속성이나 기능만 변경된 클래스를 구현 상속해 생성하고 있다.
          1. '''Model''' : 비즈니스 로직에 필요한 데이터들을 저장하는 클래스군.
          1. '''Control''' : Model과 View 사이의 정보 교환을 제어하는 클래스군. 모델군의 데이터를 뷰가 출력하는데 용이하도록, 뷰에서 받은 데이터를 모델에게 적합하도록 가공해준다.
  • Gof/Command . . . . 12 matches
         Menu는 쉽게 Command Object로 구현될 수 있다. Menu 의 각각의 선택은 각각 MenuItem 클래스의 인스턴스이다. Application 클래스는 이 메뉴들과 나머지 유저 인터페이스에 따라서 메뉴아이템을 구성한다. Application 클래스는 유저가 열 Document 객체의 track을 유지한다.
          * MenuItem 객체가 하려는 일을 넘어서 수행하려는 action에 의해 객체를을 인자화시킬때. 프로그래머는 procedural language에서의 callback 함수처럼 인자화시킬 수 있다. Command는 callback함수에 대한 객체지향적인 대안이다.
          - 처리할 request에 대해 명령어들을 어떻게 수행해야 할지 알고 있다. 어떠한 클래스든지 Receiver로서 활동가능하다.
          2. Command는 첫번째단계의 클래스 객체이다. Command는 조작되어질 수 있으면서 다른 객체들과 마찬가지로 확장가능하다.
          4. 새로운 Command를 추가하기가 쉽다. 왜냐하면 이미 존재하고있는 클래스들을 고칠 필요가 없기 때문이다.
         MacroCommand의 열쇠는 Execute 맴버함수에 있다. 이것은 모든 부명령어들을 탐색하면서 그들 각각의 Execute operation를 수행한다.
         아마도 CommandPattern에 대한 첫번째 예제는 Lieberman 의 논문([Lie85])에서 나타났을 것이다. MacApp [App89] 는 undo가능한 명령의 구현을 위한 command의 표기를 대중화시켰다. ET++[WGM88], InterViews [LCI+92], Unidraw[VL90] 역시 CommandPatter에 따라 클래스들을 정의했다. InterViews는 각 기능별 명령에 대한 Action 추상 클래스를 정의했다. 그리고 action 메소드에 의해 인자화됨으로서 자동적으로 command subclass들을 인스턴스화 시키는 ActionCallback 템플릿도 정의하였다.
         THINK 클래스 라이브러리 [Sym93b] 또한 undo 가능한 명령을 지원하기 위해 CommandPattern을 사용한다. THINK 에서의 Command들은 "Tasks" 로 불린다. Task 객체들은 ChainOfResponsibilityPattern에 입각하여 넘겨지고 소비되어진다.
  • HardcoreCppStudy/두번째숙제 . . . . 12 matches
         === this 포인터 ===
          * this포인터란 무엇이며 사용되는 경우를 찾아보세요.
         ||[HardcoreCppStudy/두번째숙제/This포인터/변준원] ||
         ||[HardcoreCppStudy/두번째숙제/This포인터/장창재] ||
         ||[HardcoreCppStudy/두번째숙제/This포인터/임민수] ||
         ||[HardcoreCppStudy/두번째숙제/This포인터/김아영] ||
          * 프로그램을 파일 하나에 다 때려넣지 말고, 헤더파일(클래스 선언), 클래스 구현부, main함수의 파일 3개로 나눠서 작성하세요.
          * 클래스멤버변수는 모두 private로 선언해야 합니다.(public으로 선언하면 안 됩니다.)
          * 각 값을 비교하는 과정에서 this포인터를 사용합니다.
  • HardcoreCppStudy/두번째숙제/This포인터/김아영 . . . . 12 matches
         '''* this 포인터'''
         그 클래스 내부에서 this는 자신 A의 포인터를 가르키는것이다.
         클래스 내부 함수 f가 있다면
         f()로 클래스 내부에선 호출이 가능한데 정확히 this->f()에서 this가 생략된 형이다.
         class A에서 class B의 내부함수를 호출하는데
         class A에서 class B의 내부함수 호출시에 this라는 인자를 넘겨준다.
         그러면 B클래스에서 A클래스포인터를 받을수 있기 때문에 A라는 클래스
  • InternalLinkage . . . . 12 matches
         Object& theObject() // 이 함수클래스의 정적 메소드나
          // friend 함수에서 호출된다.
         처음 선언될 때를 제외하고는 저 함수
         그것은 바로 InternalLinkage 때문이다. InternalLinkage 란, 컴파일 단위(translation unit -> Object Code로 생각해 보자) 내에서 객체나 함수의 이름이 공유되는 방식을 일컫는다. 즉, 객체의 이름이나 함수의 이름은 주어진 컴파일 단위 안에서만 의미를 가진다.
         예를들어, 함수 f가 InternalLinkage를 가지면, 목적코드(Translation Unit) a.obj 에 들어있는 함수 f와 목적코드 c.obj 에 들어있는 함수 f는 동일한 코드임에도 별개의 함수로 인식되어 중복된 코드가 생성된다.
          ''DeleteMe 이 말도 이해가 안갑니다. 주제로 시작한 inline은 중복 코드를 감안하고 성능을 위해서 쓰는 것이 아니 었던가요? 무엇이 문제인가요? inline 이 아닌 함수들은 ExternalLinkage로 전제 되었다고 볼수 있는데, 지적해야 할것은 inline의 operation에 해당하는 코드가 아니라, static 같은 변수가 중복을 예로 들어야 할것을... --NeoCoin''
         하지만 InternalLinkage가 초례하는 문제는 1996 {{{~cpp ISO/ANSI C++ }}} 표준화 작업에서 인라인함수(InlineFunction)를 ExternalLinkage 로 변경해서 문제가 되지 않는다.(최근의 컴파일러들은 지원한다.).
  • MFC/ObjectLinkingEmbedding . . . . 12 matches
         OLE 컨테이너, 서버 사이의 통신은 윈도우 운영체제를 매개로 동작한다. 각 OLE 를 지원하는 프로그램은 공통의 OLE DLL을 가지는데 이 것이 윈도우의 기본지원 부분이다. DLL 안의 함수들은 이렇게 객체사이의 통신을 지원한다. 이때 이를 지원하는 표준적인 인터페이스가 COM(Component Object Model)이다. 본질적으로 엠비드된 객체의 모양과 컨테이너가 그것과 통신하는 방법을 정의한것이다.
         || QueryInterface() || 특정한 인터페이스가 객체에 의해 지원되는지를 검사. 지원된다면 포인터가 리턴된다. ||
         OLE서버를 어떤 방식으로 식별할 것인가? OLE객체는 문서, 프로그램등 OLE를 지원하는 어떤 프로그램도 될 수 있다. 시스템에 있는 각각의 OLE객체는 클래스 ID 또는 CLSID라고 부르는 128비트의 숫자로 식별한다. 이들은 GUID라고도 불리우며 알고리즘을 통해서 생성되기 때문에 모두 독특한 값을 지니게된다. 이러한 정보는 윈도우 시스템의 레지스트리에 저장되게 된다.
          == OLE 객체 클래스 ==
          CDocItem 에서 파생되는 2개의 클래스 COleClientItem, COleServerItem 은 각각 컨테이너와 서버의 관점에 해당하는 OLE객체를 나타낸다.
          COleServerItem 안에서 서버를 지원하는 인터페이스도 많은 함수를 갖는다.
          || OnDraw() || 객체가 in-place 활성화 되었을때 서버에 있는 뷰클래스의 OnDraw() 함수에 의해서 그려진다. 따라서 컨테이너에 잇는 요소를 그리는 일은 서버측에서 구현되어야 하는 것이다. ||
          == OLE 도큐먼트 클래스 ==
          서버측에는 COleServerDoc에서 파생된 도큐먼트를 이용한다. 서버측에서는 반드시 OnGetEmbeddedItem() 멤버를 구현해야한다. 이는 이 함수가 순수가상 함수이기 때문이다.
  • NSIS/Reference . . . . 12 matches
         == Function (함수) ==
         함수는 Section과 비슷한 역할을 한다. 하지만, 다른 점이라면 함수는 installer 에서 직접 선택하여 호출하는것이 아니라, Section 에서 Call 명령어를 통해 호출되어 인스톨러의 기능의 일부들을 보충하는 역할을 한다. 그리고 특별한 경우로써, Callback Function들이 있다.
         || 함수들은 Section 이나 Function 안에서 정의되면 안된다.
         || 함수들중 '.' 으로 시작되는 함수들은 기본적으로 Callback function으로 예약되어있다.
         || 함수중 'un.' 으로 시작하는 것들은 일반적으로 Uninstaller를 위한 함수들이다. Uninstall Section이 정의되어있지 않은 경우, 호출되지 않을 것이다.
         || Function || function_name || 하당 함수이름으로 함수 선언 ||
         ||FunctionEnd || || 함수의 끝을 알린다. ||
         특정 이벤트 발생시에 호출되는 함수들이다.
  • NUnit/C++예제 . . . . 12 matches
          * 먼저 프로젝트를 Managed C++ 클래스 라이브러리로 만든다.
          * Test Fixture 될 클래스의 앞에는 TestFixture, 테스트 함수 앞에 Test 인 Attribute 를 붙인다.
         메인프로젝트에서 만든 새 클래스를 테스트 프로젝트에서 테스트하고 싶다. 어떻게 해야할까? 순진한 인수군은 #include <domain.h> 이렇게 하고, 테스트 클래스에 .h랑 .cpp 참조 넣어주면 될줄 알았다. 이것땜에 어제밤부터 삽질했다. 이렇게만 하면 안되고... 새로 만든 클래스를 일단 보자.
         평소대로 하자면 이렇게 하면 될것이다. 하지만 현재 프로젝트는 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmanagedextensionsspec_16_2.asp Managed C++ Extensions]이다. 이것은 C++을 이용해서 .Net을 Platform위에서 프로그래밍을 하기 위하여 Microsoft에서 C++을 확장한 형태의 문법을 제안된 추가 문법을 정의해 놓았다. 이를 이용해야 NUnit이 C++ 코드에 접근할수 있다. 이경우 NUnit 에서 검증할 클래스에 접근하기 위해 다음과 같이 클래스 앞에 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmanagedextensionsspec_16_2.asp __gc] 를 붙여서 선언해야 한다.
         __gc의 가 부여하는 능력과 제약 사항에 대해서는 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmxspec/html/vcmanagedextensionsspec_4.asp __gc] 을 참고하자. NUnit 상에서 테스트의 대상 클래스는 무조건 포인터형으로 접근할수 있다. 이제 테스트 클래스의 내용을 보자.
         아.. __gc를 쓰면 닷넷 플랫폼없는 곳에서는 쓸 수가 없겠네요. 그러면 이방법은 어떤가요? 일단 테스트할때는 테스트할 클래스에 __gc를 붙이잖아요? 나중에 배포할때는 __gc를 없애는 겁니다. 물론 Managed C++ Extensions의 문법을 쓰면 안되겠죠.(__gc빼고) 매크로를 잘 쓰면 어떻게 될거 같기도 한데... --[인수]
  • ProjectCCNA/Chapter5 . . . . 12 matches
          * 클래스A : 0xxx xxxx/xxxx xxxx.xxxx xxxx.xxxx xxxx형식
          즉, 1.0.0.0~126.0.0.0은 클래스A(1~126)
          * 클래스B : 10xx xxxx.xxxx xxxx/xxxx xxxx.xxxx xxxx형식
          즉, 128.1.0.0~191.254.0.0은 클래스B(128~191)
          * 클래스C : 110x xxxx.xxxx xxxx.xxxx xxxx/xxxx xxxx형식
          즉, 192.0.1.0~233.255.254.0은 클래스C(192~233)
          * 네트워크를 나타낼 땐 호스트 부분을 0으로 표현. 그리고 각 클래스에서 표현 가능한것의 제일 작은 수와 제일 큰수는 사용불가.
          *호스트부분이 모두0은 네트워크, 1은 브로드캐스트 번호이므로 사용하지 않는다. -> 각 클래스에서 사용가능한 최대 호스트수는 순계산-2해줘야함.
          * 각 클래스별 디폴트 서브넷 마스크
          * 클래스A : 255.0.0.0
          * 클래스B : 255.255.0.0
          * 클래스C : 255.255.255.0
  • PyUnit . . . . 12 matches
         PyUnit에서는 TestCase는 unittest모듈의 TestCase 클래스로서 표현된다.testcase 클래스를 만들려면 unittest.TestCase를 상속받아서 만들면 된다.
         testcase를 실행하는 방법은 후에 설명할 것이다. testcase 클래스를 생성하기 위해 우리는 생성자에 아무 인자 없이 호출해주면 된다.
         만일 testcase가 많아지면 그들의 set-up 코드들도 중복될 것이다. 매번 Widget 클래스를 테스트하기 위해 클래스들마다 widget 인스턴스를 만드는 것은 명백한 중복이다.
         여기에는 runTest 메소드가 없는대신, 두개의 다른 test 메소드를 가지고 있다. 클래스 인스턴스는 이제 각각 self.widget 을 생헝하고 각 인스턴스에 대해 따로 소멸되면서 각각의 test method를 실행한다.
         unittest 모듈에는 makeSuite 라는 편리한 함수가 있다. 이 함수는 test case class 안의 모든 test case를 포함하는 test suite를 만들어준다. (와우!!)
         makeSuite 함수를 사용할때 testcase들은 cmp 함수를 사용하여 소트한 순서되로 실행된다.
         PyUnit test framework는 테스트를 수행하기 위해 'TestRunner' 클래스를 사용한다. 가장 일반적인 TestRunner는 TextTestRunner이다.
         기본적으로 TextTestRunner는 sys.stderr에 출력한다. TextTestrunner 같은 클래스는 Python interpreter session과 상호작용하면서 test들을 실행시켜볼 수 있는 이상적인 방법이다.
  • Yggdrasil/가속된씨플플/4장 . . . . 12 matches
          * 장의 제목 그대로의 내용이다. 프로그램의 구조화(함수)와 데이터의 구조화(구조체) 등등을 설명하고 있다.
         == 함수 ==
          * 참조에 의한 전달은 그 전달인자의 별명(?)을 넘겨준다. 즉 그 변수 자체를 넘겨주는 것이나 다름없다. 즉, 함수 내에서 그 전달인자로 전달된 변수가 바뀌면 원래의 값에도 변화가 온다. 그래서 적절히 const로 값이 바뀌지 않도록 제한해주는 것도 좋다. 복사를 안 하므로 오버헤드를 줄일 수 있음.
         인데, compare는 함수인데 괄호는 쓰지 않는다. 괄호를 쓸 경우 그 인자까지 알아서 써줘야할 것 같은데, sort의 정확한 구조를 잘 모르는 나에겐 좀 벅찬 방법이다. 하여튼 괄호는 쓰지 않는다.
          compare 함수 포인터를 넘겨주면 students vector(또는 list)내에서 값을 꺼낸다. Student_info 형이 나오겠지 그 것들을 compare 함수에 넘겨주는 거다. --[인수]
          * throw로 예외 상황이 발생되었다는 것을 알린다. 예외 클래스엔 여러개가 있으며, 생성자로 문자열을 집어 넣을 수 있고, 이건 일반적으로 출력이 안되지만, what()함수로 확인 가능.
         == String 클래스 ==
          * max()라는 함수가 의심스럽다. 분명 msdn에도 algorithm헤더에 있다고 했는데 컴파일하면 자꾸 정의되지 않은 이름이라 에러를 뱉어낸다. 이 함수의 정체는?
  • 데블스캠프2006/월요일/함수/문제풀이 . . . . 12 matches
         [데블스캠프2006/월요일/함수/문제풀이/정승희]
         [데블스캠프2006/월요일/함수/문제풀이/이차형]
         [데블스캠프2006/월요일/함수/문제풀이/윤영준]
         [데블스캠프2006/월요일/함수/문제풀이/김준석]
         [데블스캠프2006/월요일/함수/문제풀이/임다찬]
         [데블스캠프2006/월요일/함수/문제풀이/김대순]
         [데블스캠프2006/월요일/함수/문제풀이/주소영]
         [데블스캠프2006/월요일/함수/문제풀이/윤성준]
         [데블스캠프2006/월요일/함수/문제풀이/이장길]
         [데블스캠프2006/월요일/함수/문제풀이/성우용]
         [데블스캠프2006/월요일/함수/문제풀이/이경록]
         [데블스캠프2006/월요일/연습문제] [데블스캠프2006/월요일/함수] [데블스캠프2006]
  • 바퀴벌레에게생명을 . . . . 12 matches
         CBug클래스를 생성하여 바퀴벌레의 움직임을 나타내는 멤버함수(Move)와 바퀴벌레의 위치와 방향을 나타내는 멤버변수(CPoint position, int direction)를 생성.
         다큐에서 CBug타입의 멤버 변수를 생성한다. 그리고 뷰에서 방향키의 키이벤트(OnKeyDown)를 받으면 다큐의 CBug 타입의 멤버 변수의 Move함수를 호출하고 변경된 position과 direction을 OnDraw에서 받아서 알맞은 그림을 잘라내서 뷰에 그린다.
         다큐에 RandomWalking함수를 제작하고 뷰에서 스페이스바의 키이벤트가 일어나면 0.3초의 타이머가 생성(OnTimer)되어 RandomWalking함수를 0.3마다 호출하고 변경된 위키와 방향대로 뷰에 그려준다.(OnDraw) 다시 스페이스바를 누르면 움직임을 멈춘다.
         CTile클래스를 생성하여 바퀴벌레가 밟은 횟수를 나타내는 frequency라는 멤버함수를 생성. 다큐에서 CTile타입의 배열(tile)을 생성하였다.
  • 새싹교실/2012/부부동반 . . . . 12 matches
          C를 배우면 함수를 잘 만들어야 한다 - [http://kangcom.com/sub/view.asp?sku=201004090011&mcd=571]
         * 구조체와 클래스의 차이점, 구조체의 한계를 벗어나기 위한 수단
         * 함수
         * 피보나치 수열을 계산하는 함수 작성
          1000번째, 10000번째 피보나치 수를 계산해 낼 수 있는 함수 작성
         * 포인터의 의미와 문법
         * 포인터 연산
         * 배열과 포인터의 관계
         * 다중 포인터
         * 포인터를 통해 swap(int, int) 작성해보기
         * 컴파일러의 도움없이 스스로 메모리와 포인터의 관계를 통해 완벽한 코드 구현
         * 포인터를 활용하 거품 정렬(Bubble Sort) 구현해보기
  • 이승한/질문 . . . . 12 matches
         strlen 처럼 int 형 배열의 길이를 구하는 함수를 짜던중 이해 안되는 부분.
         메인에서 들어간 sizeof(scores)는 배열 전체 크기를 리턴하는 반면에 함수에 들어간 sizeof(scores)는 int* 형의 크기를 리턴한다.
         참조를 이용해 배열을 함수에 넘길수는 없는건가요?? 배열은 잘 넘어가지 않네요;;
         vs에서 타이핑하는 방식이외에 자동으로 함수를 생성해주는 바법사를 이용해 firend 함수를 생성할수는 없나요??
         아마 승한이가 원하는 답은 아니겠지만 한번 적어본다. 지금 함수에 전달하는 것은 인트형의 포인터이기 때문에 함수는 지금 받은 것이 숫자인지 배열인지 알 수 가 없지. 게다가 주소를 참조하게 되서 함수 안에서 그 값을 변경해주면 원본 값도 변하게 되고. 그래서 나는 함수 안에 멤버 변수를 만들어서 전달 값을 복사해서 쓰거든. 보통 전달인수를 받을 때 컴파일러에서 그 원본 값을 쓰지 않고 복사값을 사용하는 건 알지? 그 작업을 프로그래머가 해주는 것이지. 밑은 여태 말한대로 구현하고 간단하게 테스트한 소스야.
          cout << "\n함수에 전달된 값이 변해도 scores의 값은 변하지 않는다.\nscores: ";
  • Benghun/Diary . . . . 11 matches
         최근 모듈화에 대해서 공부하다가 dependency에 대해서 생각해 보았다. 무엇을 만들었을 때 dependency가 발생하는가? 함수클래스를 사용할 때 발생하더라. 클라이언트 코드는 사용하는 함수클래스가 변경될 때 영향을 받을지도 모른다. 그렇다면 dependency를 최소화하는(또는 없애는) 방법은 함수클래스를 사용하지 않으면 된단 말인가? 코드 중복은 어떻게 없앨 수 있더라?
         아는 사람 중에 함수클래스를 만드는 것을 대단히 꺼리는 사람이 있다. 만들면 좋을 것 같은 간단한 함수조차도 직접 만들려고 하지 않는다. 하지만 이미 잘 만들어 진 라이브러리는 자주 사용한다. dependency가 없다면 변경에 영향을 받는 모듈이 없을 것이다. 나름대로 잘 사용하는 replace all in files, replace all in file, copy & paste등이 강력한 프로그래밍 도구중 하나인 것 같기도 하다.(최소한 나보다는 잘 사용하는 것 같다, 나름대로의 노하우도 있는 것 같다) 아마도 그는 dependency를 최소화하는 것에 큰 관심이 있거나 다른 이유가 있나보다.
         table에 대한 query가 여러 곳에 분산되어 있었다. table이 변경되자 모든 코드를 살펴야 했었다. 이 문제를 해결하기 위해 테이블에 접근하는 클래스와 쿼리를 실행하는 클래스를 추가했다. Java 웹 애플리케이션 프레임웍 분석과 설계의 노하우, Applying UML and Patterns, 마소 2003/7 고전을 찾아서4 모듈화와 정보은닉의 상관관계가 도움을 줬다.
  • Debugging . . . . 11 matches
         || Step Into || F11 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 함수 내부로 들어가서 계속 실행 ||
         || Step Over || F10 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 내부로 안들어가고 실행만 하고 다음 계속 실행||
         || Step Out || shift+F11 || Step Into 로 함수안에 들어갔다가 나오고 싶을때 사용 ||
         || Call Stack Window || 함수 호출 경로를 보여줌 ||
         || Step Into || F5 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 함수 내부로 들어가서 계속 실행 ||
         || Step Over || F6 || 디버깅 모드에서 한 라인씩 실행 - 함수를 만나면 내부로 안들어가고 실행만 하고 다음 계속 실행||
         || Run to Return(Step Out) || F7 || 어떤 함수안에 들어갔다가 바로 그 함수를 나오고 싶을때 사용 ||
          * 디버깅 하고 싶은 곳에 보고 싶은 변수명을 파일로 출력하는 함수를 넣는다.
  • Gof/Strategy . . . . 11 matches
         텍스트 스트림을 줄 단위로 나누는 많은 알고리즘들이 있다. (이하 linebreaking algorithm). 해당 알고리즘들이 그것을 필요로 하는 클래스에 긴밀하게 연결되어있는 것은 여러가지 이유 면에서 바람직하지 못하다.
         이러한 문제는, 각각의 다른 linebreaking을 캡슐화한 클래스를 정의함으로 피할 수 있다. 이러한 방법으로 캡슐화한 알고리즘을 stretegy 라 부른다.
         Composition 클래스는 text viewer에 표시될 텍스틀 유지하고 갱신할 책임을 가진다고 가정하자. Linebreaking strategy들은 Composition 클래스에 구현되지 않는다. 대신, 각각의 Linebreaking strategy들은 Compositor 추상클래스의 subclass로서 따로 구현된다. Compositor subclass들은 다른 streategy들을 구현한다.
          * ArrayCompositor - 각각의 줄에 특정 수의 단어가 들어가도록 줄나눔을 하는 알고리즘을 가진 클래스.
          * 많은 관련 클래스들이 오직 그들의 행동들에 의해 구분된다. Strategy들은 많은 행위중에 한가지로 상황에 따라 클래스을 설정해주는 방법을 제공해준다.
          * 당신은 알고리즘의 다양함을 필요로 한다. 예를 들어, 당신이 알고리즘을 정의하는 것은 사용메모리/수행시간에 대한 trade-off (메모리를 아끼기 위해 수행시간을 희생해야 하거나, 수행시간을 위해 메모리공간을 더 사용하는 것 등의 상관관계)이다. Strategy 는 이러한 다양한 알고리즘의 계층 클래스를 구현할때 이용될 수 있다.
          * 클래스가 많은 행위들을 정의한다. 이는 다중조건문들에 의해서 구현되곤 한다. 이러한 많은 조건문들 대신, 각각 관련된 조건들을 Strategy 클래스들에게로 이동시킬 수 있다.
  • Java Study2003/첫번째과제/노수민 . . . . 11 matches
         자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.
         자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.
         자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.
          클래스로더는 자바 소스를 컴파일해서 생성된 클래스 파일을 로딩한다.
          클래스 파일내의 메서드, 변수들, 객체 변수들을 자바가상머신의 각 메모리에 로딩한다.
          객체변수, 클래스변수 --> 힙 영역..
  • JavaScript/2011년스터디 . . . . 11 matches
          * 함수형 선언적 프로그래밍 언어로서의 자바스크립트
          * [박정근] - javascript에 관한 전반적인 내용들을 배웠습니다. 지난 시간동안 javascript를 공부하면서 배웠던 내용들을 정리하는시간이 되었던것 같습니다. 게다가 이론으로는 알고잇던 프로토타입같은 내용은 실제로 구글개발자 툴의 콘솔을 이용하여 직접 보면서 설명을 들으니 확실히 이해되기도 하였구요ㅋ 관심가는 부분에는 함수형 선언적 프로그래밍인데 함수형 언어를 사용한 적이 없어서 그런 방식으로 프로그래밍 하는 것에 대해 신선함을 느끼고 더 알고 싶어졌습니다. 또 자바스크립트를 하면서 DOM에 관해서도 알아야 겠다는 생각이 들었습니다. 하아.. 공부할게 많네요ㅋ
          * [김태진] - 다른분들은 오지못해서 거의 제 수준에 맞추어 형진이형이 설명해주셨어요. 일단 오늘 느낀건 함수형 언어의 위대함. + 괄호의 헷깔림 이에요. 한줄에 쓰다보니 헷깔리던.... 자바스크립트가 함수형 언어의 특징을 가지고 있는지라 피보나치를 쉽게 나타낼 수 있고, 그걸 배열에도 어렵지 않게 나타낼 수 있었던거 같네요. 그렇게 함수형언어에 초점맞춰진 코딩은 처음 보는데 절차적이 아니라 뭐랄까 좀 단편적으로 생각해도 된다는 점이 있을것이란 말이 무척 공감이 되었던거 같아요. 요즈음 뭔가 하나를 배우면 그 앞에 3개의 새로운 배울것이 생기는 느낌이네요. 더 열심히..
          * 프리드로잉, 오른쪽클릭시 발생하는 메뉴에 대한 처리를 했습니다. 함수가 유연하다보니 생각보다 쉽게 되네요. 드래그 중에는 마우스포인터가 캔버스 영역에서 못벗어나도록 하고 싶은데 스크립트만으로는 힘들어보이네요. ㅜㅜ - [정진경]
          * 오늘은 소스가 너무 스파게티여서 다른걸 첨가할 수 없었기에 리팩토링을 하고있습니다. 그 결과 나름 코드가 깔끔해졌고 기능들을 손쉽게 추가할 수 있게 되었습니다.+html select를 이용해 색깔고르기를 하고 싶었는데 함수를 찾느라 한참 걸렸네요.+ 선으로 그림그려질때 마우스를 up했다 다시down 하면 이전 위치가 저장되어 있었는데, 문제를 해결했습니다. -[김태진]
          * 드래그 중일 때에는 캔버스 안에 마우스포인터를 가두고 싶은데 자바스크립트로 가능할지 잘 모르겠고, 또 엘리먼트가 없는 공간에도 동적인 캔버스를 생성하려는데 바디의 영역이 원하는대로 되지 않네요. HTML 등 배경지식이 부족해 구현에 어려움을 겪고 있습니다.. -[정진경]
          * 드래그중일때는 마우스포인터를 따라 그려지다가 드래그를 떼었을때 그동안의 것들은 사라지고 마지막의 그림만 남도록 하는것을 구현중입니다. 아무리해도 아이디어가 떠오르지 않네요,,, 늘어나는것은 입코딩뿐...ㅋ 정 안되면 다른 기능들 먼저 추가해 볼 생각입니다. p.s. 노트북 포멧을 하면서 백업파일을 제대로 관리하지 않아서 고쳐 작성중이던 파일이 날아갔어요ㅜ 위키작성의 중요성을 실감하는 중입니다. -[박정근]
  • MFC/AddIn . . . . 11 matches
          멤버함수 자동완성, 멤버 함수 찾아가기, 편집 문맥 표시, 프로젝트 파일 열기, 다중 클립 보드, 강화된 Syntax highlighting, 프로젝트 파일 열기 등..
          Ctrl+PgDn: 함수의 처음 부분으로 이동
          Ctrl+6: 함수의 선언부에서 정의부로의 이동
          Ctrl+5 -> Ctrl+1 -> Ctrl+6: 커서가 있는 위치의 멤버 함수의 선언에 대한 정보를 저장. 함수의 몸체가 자동으로 생성된다.
          클래스 뷰 폴더 구조를 저장하고 복구할 수 있도록 해주는 플러그인이다.
          ''종종 클래스 뷰가 이유없이 날아가는 일이 발생한다. 그런 경우를 위해 써먹으면 좋을 듯''
  • MFC/DynamicLinkLibrary . . . . 11 matches
         Library.DLL을 3개의 프로그램 A,B,C가 동시에 공유한다고 하면 각각의 프로그램이 실행될때마다 각 프로그램에서는 DLL파일의 함수로의 링크가 일어난다. 이런 과정은 윈도우 운영체제에 의해서 자동으로 이루어지고, 한개의 프로그램이라도 실행이 종료되지 않으면 윈도우는 DLL을 메모리에서 제거하지 않고 남겨준다.
          프로그램과 DLL이 메모리 안으로 로드되자마자 사용되는 함수들에 대한 링크가 성립된다.
          프로그램이 먼저실행되데 DLL은 프로그램의 요청이 발생한 시점에서 메모리에 로드된다. 그때가 되서야 프로그램은 DLL로부터 함수의 어드레스를 얻고 그것을 사용해서 함수를 호출한다.
          관련함수) LoadLibrary(), GetProcAddress(), FreeLibrary()
         DLL은 함수에 대한 코드만을 저장는데 국한되는 것이 아니다. 비트맵, 폰트와 같은 리소스들을 DLL 안에 위치시킬 수도 있다. 예를 들자면 카드놀이에 사용되는 Cards.dll 에서 카드들에 대한 비트맵 이미지와 그 것들을 다루는데 필요한 함수들을 포함하고 있다.
          DLL 에 있는 요소들은 export 된 것들만을 접근 할 수 있다. export 는 함수, 클래스, 글로벌 정적 변수, 리소스들이 가능하다.
          == DllMain() 함수 ==
          독립적 실행은 불가능하지만 main함수의 변형된 형태를 포함한다. 이 곳에서는 dll이 사용되기 전에 초기화되는 내용들이 포함되게 된다. DLL초기 로드시 운영체제가 호출한다.
  • MoreEffectiveC++/Operator . . . . 11 matches
          * Item 5: 사용자 정의 형변환(conversion) 함수에 주의하라!
          * C++에서는 크게 두가지 방식의 함수로 형변환을 컴파일러에게 수행 시키킨다:[[BR]] '''''single-argument constructors''''' 와 '''''implicit type conversion operators''''' 이 그것이다.
          * '''''implicit type conversion operator''''' 은 클래스로 하여금 해당 타입으로 ''return'' 을 원할때 암시적인 변화를 지원하기 위한 operator이다. 아래는 double로의 형변환을 위한 것이다.
         뭐 이런 암시적 형변환을 막을려면, 형전환 시키고 하는 암시적 사용을 하지 않고, 다른 함수로 명시적으로 해 줄수 있다.
         우리는 ++와 --연산자(이하 가칭 가감 연산자)를 즐겨 쓴다. 이 연산자 역시 클래스에서 정의해서 사용할수 있다.
         위의 코드에서는 strlen() 함수내부에서 p에 관련한 null pointer 검사가 필요하지 않다. 왜냐하면 && 에서는 앞의 조건이 부정 즉, ( false && anything ) 의 경우에는 뒤의 조건(anything)은 수행조차 안하기 때문이다. operator ||의 경우도 특정 조건에서,(true || anything) 뒤에 코드를 수행하지 않은다는 것은 비슷하다.
         해당 함수(construcWidgetInBuffer())는 버퍼에 만들어진 Widget 객체의 포인터를 반환하여 준다. 이렇게 호출할 경우 객체를 임의 위치에 할당할수 있는 능력 때문에 shared memory나 memory-mapped I/O 구현에 용이하다 constructorWidget에 보이는건 바로
         이거 간단히 보이지만 placement new의 전부이다. operator new의 역할은 해당 객체를 위한 메모리를 찾고(할당), 해당 포인터의 반환이고 placement new의 경우에는 호출자가 이미 메모리를 확보하였고, 단순히 포인터 반환만 해준다. 모든 placement new가 반드시 이런 pointer의 전달 역할을 한다. 그리고 size_t 인자가 아무런 이름이 없어도 반항 안한다. 자세한건 Item 6을 보면 이해가 갈것이다.
         메모리 해제(deallocaion)은 operator delete함수에 행해지는데 일반적으로 이렇게 선언되어 있다.
  • VendingMachine/세연/1002 . . . . 11 matches
          1. 명확하지 않는 변수/함수&메소드 이름에 대해 - 이름을 다르게 바꿔준다. 또는 무엇을 하기 위한 것인가에 입각, 함수/메소드 로 추출한다. [[BR]]
          3. 긴 메소드 - 함수 & 메소드를 따로 추출. 즉, 하나의 함수 내에서 하는 일들이 많다고 생각될 때. [[BR]]
          4. 중복 - 중복되는 부분에 대해 함수 & 메소드로 추출.[[BR]]
         하지만 이건 추후에 Vending Machine 에서 메소드를 다른 클래스에게로 이양시켜주면서 UI 부분과 관련한 클래스를 추출해 낼 수 있을 것 같다고 생각합니다. 여기서는 추후에 진행하도록 하겠습니다.
         이 이외엔 쓰이지 않지만, private 멤버로 있습니다. 이러한 입력을 받기 위한 임시변수는 그냥 멤버에서 없애주면 됩니다.
         그리고, select_drink-1 식으로 쓴 것이 많은데, 이 이유는 아마 번호를 1,2,3,4 ... 로 찍기 위함일 것입니다. 그리고 select_drink 또한 vending_machine 의 멤버인데, 특별히 하는 일이 없는 한 지역변수로 두는것이 낫습니다.
         이쯤에서 문제점 - vending_machine 이 완전히 God 클래스입니다. 완전히 이 프로그램 자체가 vending_machine 객체와 동급이 되어버리죠.
  • woodpage/VisualC++HotKeyTip . . . . 11 matches
          *현재 커서에 있는 변수나 함수의 type이 tooltip으로 나옴
          *멤버 변수 / 함수 목록이 팝업창으로 나타남
          *디버그시 실행 하다가 함수나 어떤 루틴으로 안으로 들어가서 실행
          *역시 이동하는 기술로 BrowseGoToDefinition 이라고 함 마우스 오른쪽 팝업메뉴에도 나옴 사용법은 예를 들어 fSelect()라는 함수를 사용했을때 그함수내용을 보고싶으면 fSelect에다가 커서를 놓고 F12를 누름 (변수,define도 됨) 그럼 fSelect()가 구현된(?)곳으로 이동함 사용하면 아주 유용함 단점은 *.ncb 파일이 조금 커짐 별문제 아님 사실 마우스 오른쪽 팝업에서 쓰는걸 더 많이 씀
          *BrowseGotoReference라고 함 함수는 선언된곳으로 감 예를 들어 클래스 맴버 함수클래스 header로 감
          *Ctrl + Shift + H 를 누르면 클래스 header에서 cpp로 cpp에서 header로 이동한다. 한마디로 원추~!
  • 새싹교실/2011/Pixar/3월 . . . . 11 matches
          * Keywords : 컴파일러, 프로그래밍 언어, printf 함수, main 함수, #include, assert 함수, 변수, 자료형
          * main 함수는 프로그램이 시작하는 부분이예요. 앞으로 함수를 배우기 전까지 모든 코드는 main 함수 안에 작성합니다.
          * printf 함수는 콘솔에 내용을 출력해주는 역할을 합니다.
          * printf 함수가 내용을 출력해준다는 것을 컴퓨터가 모르니까요!
          * 위에서 분명 모~든 코드는 main 함수 안에 쓴다고 했는데 #include <stdio.h>는 맨 위에 썼어요.
          * 아, 그리고 assert도 함수같은 것인데 assert가 무슨 일을 하는지는 똑똑한 아저씨들이 assert.h에 써두었습니다. 우리는 그냥 #include <assert.h>를 적어 저 파일을 컴퓨터가 읽어볼 수 있게 알려주기만 하면 됩니다. printf를 쓸때처럼요!
          * 1주차에는 수업시간에 했던 간단한 Hello World랑 간단한 연산과 assert함수에대해서 배우고 응용해 보았다. 수업시간에했던 C공부에 생겼던 의문들을 자세하게 다 알 수 있어서 좋았다. C가 한참막막해보였는데 새싹교실 첫시간에 희망이생겼다. 다음시간에도 많이 배우고 갔으면 좋겠다. - [김연석]
  • .bashrc . . . . 10 matches
         # 별칭(alias)이나 함수, 프롬프트같은
         function _exit() # 쉘에서 종료시 실행할 함수
         # 별칭(alias)과 함수
         # 논쟁의 여지가 있지만 몇몇 함수들은 조금 덩치가 큰데(즉, 'lowercase')
         # 이 파일 크기를 줄이고 싶다면 이런 함수들은 스크립트로 빼도 됩니다.
         # 많은 함수들은 bash-2.04 예제에서 거의 그대로 갖다 썼습니다.
         # .. 과 함수
         # 파일 & 문자열 관련 함수들:
         # 프로세스/시스템 관련 함수들:
         # 이 함수는 리눅스의 'killall' 스크립트와 거의 비슷하지만
  • C++스터디_2005여름/학점계산프로그램/문보창 . . . . 10 matches
          static const int NUM_STUDENT; // 학생 수(상수 멤버)
          Student * student; // 학생들의 배열 포인터
         // 상수멤버 초기화
          // 점수를 입력받아 객체배열의 멤버를 초기화
          static const int NUM_GRADE; // 과목 수 (상수 멤버)
          void find_average(); // 평점을 구하는 함수
          void input_grade(); // 점수을 입력받는 함수
          void show(); // 출력함수
         // 상수 멤버의 초기화
          fin.ignore(100, ' '); // 사용자 지정 문자가 나올때까지 읽어 버리는 함수
  • CppStudy_2002_1/과제1/Yggdrasil . . . . 10 matches
         int count=0;//함수가 호출된 횟수를 셈
          cout<<"함수를 몇번 호출 합니까?";
          cout<<"당신은 지금까지 "<<n<<"번 함수를 호출 하셨습니다.\n";
          char *str;//문자열을 가리키는 포인터
          //beany의 str멤버를 새 블록을 지시하도록 설정
          //beany의 ct 멤버를 설정한다.
         //함수는 사용자에게 이름과 핸디캡을 요구한다
         //함수는 전달인자로 전달된 값들을 사용하여
         //함수는 handicap을 새 값으로 초기화한다
         //함수는 golf 구조체의 이름을 표시한다
  • ExecuteAroundMethod . . . . 10 matches
         스몰토크에서는 다음과 같은 방법으로 해결하고 있다. 스몰토크에는 Block이라는 객체가 있다. 이 블록을 파라메터로 넘겨주는 것이다. 즉 1. 파일 연다. 2. 작업 블록을 파라메터로 넘겨준다. 3. 파일 닫는다. 이런식으로 되는 것이다. C++에서는 함수 포인터를 넘겨주는 방법으로 해결할 수 있을 듯하다. 이런 것을 Higher Order Programming이라고 했던 것 같다.(SICP) C++에서 멤버 함수는 원칙적으로 함수 포인터가 안되는 것으로 알고 있다. 그래도 그냥 그런가 보다 하자. 정말 이상하다.--;
          ''C++ 에서도 멤버함수에 대해 함수포인터 넘기기가 가능함. (문법은 생각 안남) --[1002]''
  • HardcoreCppStudy/첫숙제/ValueVsReference/김아영 . . . . 10 matches
         - 함수는 인수의 값을 스택에서 읽어들인다.
         - 변수 자체의 값을 전달하는 것이 아니라 인수로 사용되는 변수에 대한 포인터를 전달하는 것이다.
         - 함수에 배열을 전달하는 유일한 방법이다.
         - 함수내에서 인수로 사용되는 변수의 값을 변경할 수 있다. (특정 상황에 따라)
         - 인수를 전달할 때에는 함수에 전달되는 인수가 포인터라는 사실이 함수 정의와 프로토타입에 반영되어야 한다.
         - 함수내에서 전달된 변수를 사용하기 위해서 간접(indirection) 연산자를 사용해야 한다.
         값에 의한 전달에서 변수의 값이 함수에서 변경될 수 없는 반면에, 참조에 의한 전달에서 변수의 값이 함수에서 변경될 수 있다.
  • LoveCalculator/zyint . . . . 10 matches
          음.. 그래도 클래스가 없다닛~!! 에잇 클래스가 없는 C++은 단팥없는 붕어빵이얏~!(괜히 심술중..ㅎ) ㅋ~
          ㅎㅎㅎ 위에줄은 단순히 심술이었구.ㅎ 넘흐 잘해놓으셨엉..ㅎ 함수나누는 능력이 넘흐 좋으셈..ㅎ
          └ 사실;; 아직 클래스 공부는 안해서 쓸줄 모르거덩 ㅋㅋㅋㅋㅋ 그래서 못썼어;; 아직 벡터랑 이런거만 배워서 일단은 저리 해두었엉 ㅠㅠ
          함수가 막 나열되어 있어서 좀 보기는 그렇다... 크크-zyint
          알파벳에서 숫자가 아닌 문자(alpha = alpha - 'a' +1)로 처리 하였다면 가독성이 좋아지지 않았을까? 그런데, 이건 내 취향일 수도 있지만,.. class로 함수들을 묶어 외부 접근을 못하게 했으면 나중에 소스코드를 재사용하기 훨씬 쉬워졌을텐데. 함수 분류는 현태 말대로 좋은거 같네. (그리고 upper함수는 toupper라고 이미 구현되어 있어.) - 이영호
          위에말대로 클래스는 아직 배우지 않아서;; 배우면 곧 적용시켜야 겠네요^^ 아직 클래스의 위력은 잘 모르겠어서; -zyint
  • MockObjects . . . . 10 matches
         실제의 객체역할을 흉내내는 일을 하는 객체이다. 보통 MockObject라는 클래스를 상속받아서 (구현은 각 언어별로 '알아서'이다. ^^; 처음 Mock 의 개념이 나온 컬럼은 Java 소스였다.) 만들어준다. 테스트를 위해서는 처음에 해당 객체에 초기설정을 해 둔다. 그리고 Test를 돌리게 된다.
         사용 예2) Datatbase 와 관련된 프로그래밍에 대해서 UnitTest를 할때, DB Connection 에 대한 MockObject를 만들어서 DB Connection을 이용하는 객체에 DB Connection 객체 대신 넣어줌으로서 해당 작업을 하게끔 할 수 있다. 그리고 해당 함수 부분이 제대로 호출되고 있는지를 알기 위해 MockObject안에 Test 코드를 넣어 줄 수도 있다.
         || MockObject || Mock Object들의 상위클래스. Mock Object들은 MockObject 들을 상속받아서 구현한다. ||
         || Expectation || 소위 말하는 '기대값' 을 위해 미리 Mock Object에 예정된 값들을 채워넣기 위한 클래스들. MockObject는 자신의 구현을 위한 자료구조체로서 Expectation 클래스들을 이용할 수 있다. ||
         || ExpectationCounter || 해당 함수의 기대하는 호출횟수를 카운트 하기 위한 도움 클래스 ||
         || ExpectationList || List 도움 클래스 ||
         || ExpectationSet || 집합 도움 클래스. 내부적으로는 Dictionary를 이용, flag check ||
         || ExpectationMap || Key : Value. Map 도움 클래스 ||
  • RedThon/HelloWorld과제 . . . . 10 matches
          * HelloWorld를 .py파일을 실행해서 HelloWorld출력하기(3가지로) 힌트 : 클래스, 함수, 그냥
          다음..함수를 이용한...나름대로..함수이길..바라고 있음...;;
          * 문자열를 변수에 할당해서 그냥 출력(print), 리스트를 함수에 전달인자로 넘겨준 다음 루프를 써서 출력, 문자열을 함수에 전달인자로 넘겨준 다음 루프를 써서 출력하는 세가지 방법으로 숙제를 잘 했네.
          그리고..클래스...상당히..어려울거같아...좀더..공부한후에 할께요..
          사실 그 클래스때문에 오프모임을 하자는 거지. 클래스라는 문법도 생소할 뿐더러, 클래스를 가지고 객체 지향이라는 개념을 이야기할 수 있기 때문이야. --[Leonardong]
  • RubyLanguage/Class . . . . 10 matches
         = 클래스 =
          * 인스턴스화 할 수 없는 클래스
          * Class 클래스는 Module 클래스의 서브 클래스
          * 클래스 = 모듈 + 인스턴스화 능력
          * 따라서 클래스는 하나만 상속할 수 있다.
          * '''Include''' : 클래스가 모듈을 상속받는 것.
          * 앞의 Service 클래스는 최상위 레벨의 namespace에 속해 있고, 뒤의 Service 클래스는 Library 모듈에 속해 있다.
  • whiteblue/MyTermProject . . . . 10 matches
         // 함수 선언
         // 메인 함수의 끝 //
         ////////////////// 메세지 출력 함수 //////////////////
         /////////////// 선택 메뉴 함수 ////////////////
         //////////////// 결과 출력 함수들 ////////////////////
         ///////////////// 그 밖의 함수들 /////////////////////
         void sort(int * x) // 소트 함수
         int input() // 올바른 입력을 위한 입력함수
         void grade_() // 등급을 입력하는 함수
         void pass() // 바로 넘어가지 않기 위한 함수
  • 데블스캠프2002/진행상황 . . . . 10 matches
          * 목요일의 ["RandomWalk2"] 에 대해서 다시 CRC 디자인 세션과 구현시간을 가져보았다. (["ScheduledWalk/재니&영동"], ["ScheduledWalk/창섭&상규"]) 이번에는 신입회원팀과 기존회원팀으로 나누어서 디자인 세션을 가지고, 팀별로 구현을 하였다. (신입회원 팀에서의 클래스 구현에서는 1002가 중간 Support)
         Python으로 만든 스타크래프트 놀이는 참가자들이 무척이나 좋아했다. 또 그 직전에 Python Interactive Shell에서 간단하게 남자, 여자, 인간 클래스를 직접 만들어 보게 한 것도 좋아했다. 아주 짧은 시간 동안에 OOP의 "감"을 느끼게 해주는 데 일조를 했다고 본다.
          * 대체적으로 RandomWalk 는 많이 풀었고, HanoiProblem 은 아직 재귀함수를 많이 접해보지 않은 신입회원들에게는 어렵게 다가간거 같다. - 상협
          * 추상화 단계에 대해서 - 세미나 대상자의 수준을 파악하고, 그 사람에게 친숙한 지식들 (만일 컴구조에서 어드레스/옵셋 이야기를 그들이 배웠던 포인터의 개념과 같이 설명했더라면? 우리가 파이프라인 설명을 들었을때 책에서 세탁기의 예가 나온것처럼 설명을 했었더라면?)과 융합시키는 건 어떨까. 정직이가 중간에 '포인터 지금 어렵죠? 그거 나중에 어셈을 배우면 그냥 저건 메모리 주소에요' 라고 설명했었는데, 그것을 실제로 메모리 그림을 그려주고, 포인터의 값이 어떻게 들어가는지에 대해 설명했었더라면 어떠했을까? --석천
          * 불필요한 스레드일지도 모르겠으나, 일단 완벽히 어셈쪽 이야기를 하는 것이 아니라, 단순히 C 언어같은 하이레벨 언어에서의 관점으로 얘기하는 것이라면, 포인터란 '가르키는 것' 이라는 추상적인 개념일 뿐입니다. 오히려 어설프게 메모리의 주소라는 개념을 알게 된다면 나중에 더욱 큰 혼돈을 불러일으킬 수 있습니다.. 저처럼요.. -["zennith"]
          * 불필요한 스레드란 없으니 걱정말고. ^^; 개인적으로 C 와 어셈과의 포인터관계를 어디서 찾았냐면, 해당 주소값이란 것이 무엇인가에서 찾았다. (단, 내가 정직이나 남훈이보단 하드웨어 관련지식이 깊지 않다) '포인터 값을 화면에 찍었을 경우에 나오는 엄청나게 큰 숫자(윈도우의 경우 32비트) 의 의미는 무엇인가?' 라는 질문을 하게 되었고. 그 이후 메모리가 16메가바이트라는 건 메모리에 0번부터 16메가바이트-1 이라는 번호를 부여하고, 해당 번호에 값을 대입하는 것이라는 접근을 하게 되었지. (물론, 이것도 물리적 주소는 아니겠지. 결국 우리가 이용하는 주소란 OS 에 의해 한번 걸러진 논리적 주소겠지.) 추상화의 정도를 이야기하라는 건 꼭 해당 언어 기준으로 이야기하라는 게 아니라, 경험에 대한 연결고리(여기서는 'C에서 포인터 변수를 화면에 찍어보니 이상하게 큰 숫자가 나왔다' 정도)를 찾아보자라고 한다면 정말 이야기가 '추상적'이려나; --석천
  • 레밍즈프로젝트/연락 . . . . 10 matches
         2. 픽셀의 기능 : Pixel 인터페이스는 draw라는 순수 가상 함수를 가지고 있어 그리고 전달인자로 CMyDouBuffDC*를 받게 되지. 그리고 SetPixel(int x, int y)따위를 통해서 윈도우에 그림을 그리게 되지 (이부분은 [레밍즈프로젝트/프로토타입/SetBit]참조)을 통해서 배경에 대한 픽셀을 뿌리게 되는거지.
         4. CMyDouBuffDC는 생성되면 더블 버퍼링을 준비해주게 되. 그리고 이 녀석을 선언하고 파괴하는 곳은 View의 OnDraw뿐이야. 나머지는 모두 포인터또는 참조를 이용해서 넘겨 받아야 해
         2. UML. GAME클래스 내부를 그려서 설명해 보았는데. 드로잉 부분에서 윈도우 핸들과 종속이 걸린대. 수정 방법에 대해서도 이야기 해 주셨는데. 현재 코드 부분에서는 CMyDouBuff 부분 이외에는 수정할 곳 이 없어. 일단 클래스 구조는 잘 짠듯 싶어!!
         4. 레밍에 대해서. 일단 내일까진 레밍 클래스 모습을 거의 완성해 보려고 함;;
         클래스 구조 짜는거 같이 모여서 해야 할 것 같기도해;; 너무 어려워;; 그리고 위의 코드는 당연히 에러가 나는거야;; Pixel 녀석을 CArray에 쳐 넣으삼 - 이승한
         야 버튼리스트 클래스랑 버튼클래스 따로만들어서 추가하는 건 해봤는데 도무지 감이 안잡힌다
         니말대로라면 버튼리스트 클래스에다 버튼추가하는 함수만들어서 그거 호출하면 저절로 버튼리스트에 하나씩 추가되서 밖히는거잖아
  • 사과나무/과제방/1회차/김도익 . . . . 10 matches
         scanf 함수는 사용자로부터 자료를 입력받는 함수입니다.
         scanf() 함수는 입력란을 만들어 자료를 입력받는 함수입니다. 입력된 자료는 매개변수로 지정한 변수에 대입됩니다. 문장 형식을 통해 입력된 자료를 변수에 대입한다는 점에서 변수의 값을 문장 형식에 사용하는 printf() 함수와는 출력 방향이 반대인 셈입니다
         scanf() 함수를 사용하기 전에 printf() 함수로 안내문을 보여주는 것이 좋습니다.
         scanf() 함수로 입력된 자료는 변수에 저장됩니다. 이때 입력받을 수 있는 자료형의 종류가 정해진 상태이므로 사용자가 제대로 입력해주어야 합니다. 따라서 scanf() 함수로 자료를 입력받기 전에 어떤 자료를 입력해야 하는지 알려주는 안내문이 필요합니다. 이 안내문은 printf() 함수를 통해 미리 보여줄 수 있습니다.
  • 새싹C스터디2005 . . . . 10 matches
         포인터에 대해 진도가 나가야될까요?
         구조체와 포인터에 대해 다룹니다. 포인터에 대해 다루게 된다면 값에 의한 전달, 주소에 의한 전달도 기본으로 다뤄야겠죠? 그에 따른 모듈화의 학습도요. 그리고 가능하면 메모리 할당에 대해서도(malloc명령문) 다뤄주세요.
         '''함수에 대해서 다루지 않았다면 일단 함수에 대해 다뤄주세요'''
         단축계산(short-circuit evaluation)의 개념을 설명한 프로그램을 읽고 이 프로그램에서 4개의 printf()함수를 실행했을 때, i, j의 값이 왜 그렇게 나오는지를 설명하시오.
         다들 학교 생활하시기 바쁘실테니 휴학생인 제가 교장(?)비슷한 역할을 하겠습니다. 목표는 중간고사 전까지 포인터(또는 시험범위)까지 진도를 나가고 스터디 종료하는 것입니다. -[강희경]
         신입생 C 과정 중에 함수를 잘 다룰 수 있게 해주세요. Refactoring 세미나시 함수를 아는 전제하에 할 것입니다. --재동
         [새싹C스터디2005/pointer]와 [포인터 참고자료]페이지가 따로 노네요.--[Leonardong]
  • 새싹교실/2011/A+ . . . . 10 matches
         그 뒤에 배열과 포인터를 동시에 나가려 했으나 이해력의 부족으로 배열선언 하는법까지만 배웠다.
          * 중간고사 범위에 맞춰서 함수에대해서 배웠다. 진경이한테 얼핏 배워서 쓰는법은 알았었지만 return에 대해서 정확히 이해를 못했었는데 이번 수업으로 return쓰는 법을 이해하게 되었다. 함수를 쓸 수 있게 된덕에 앞으로 좀더 많은것을 짤 수 있게 될 것 같다. 그리고.. 팩토리얼을 짜봤다.[고한종/팩토리얼]
          아참 함수도 배운것같다.
          그런데 중간시험볼때 왠지 함수옆에 ;이거 안쓴것같다 제길.....
          * 아, 실수로 피드백 쓰는 걸 까먹어서 언제 했는지도 기억이 안난다. 큰일이다. 당연히 뭐했는지도 기억이 안난다, 다만 내가 아직 배열과 포인터를 못쓰는걸 보아 복습을 했었던 것 같다. 진짜 배열 이전에 배우는 것이라면 이제 능숙하게 쓸 수 있는 것 같다. - [고한종]
          * 피드백 쓰는게 갈 수록 늦어지고 있다 큰일이다 으헝헝. 배열과 포인터, call by value==pass by value에 대해서 배웠고 과제는 swap()을 구현해보라 하셨다. 포인터사용이 아직 능숙하진 않지만 이걸 이용하면 이제 할 수 있는게 무궁무진 해지겠지... 과제완료 : [고한종/swap()] 그리고 이걸 이용해서 다음 C프로그래밍 과목 과제로 예상되는 sort를 시도하고 있으나 잘안됨 ㅜㅠ - [고한종]
          F10 : 한 단계씩 실행( 함수에 들어가지 않는다.)
          F11 : 함수까지 포함, 한단계씩 실행
  • 새싹교실/2011/AmazingC/6일차 . . . . 10 matches
          * 함수의 선언 방법
          * 함수엔 반환형이 존재한다.(반환형을 쓰지 않아도 된다)
          * 함수의 선언부: 반드시 함수 호출하기 전에 선언을 해놓아야 한다!!
          * 함수의 선언부=정의부가 될 수 있다.
          * sum2의 경우 호출시 메인함수 위에 선언이 되어있나 확인한 다음 sum2의 정의부를 실행한다!!
          * 함수의 recursive호출
         6일차를 너무 늦게 올렸다. 얘들아 미안 ㅋㅋㅠㅠ 함수에 대해 좀 자세하게 알려주고 싶어서 2파트로 나눴다. 함수의 기본적인 개념들이라, 그리 어렵진 않았을 것 같다. 그리고 삼항 연산자를 이용해서 팩토리얼을 계산하는 방법도 알려주었다. 다음 시간엔 지역변수,전역변수,정적변수에 대해 배우고, 함수를 이용한 다양한 연산을 연습합니다.-[[신기호]]
  • Adapter . . . . 9 matches
         클래스 인터페이스를 예상되는 다른 인터페이스로의 변환을 한다. '''Adapter'''는 상이한 인터페이스 때문에 다른 달랐던 클래스의 일을 묶는 역할알 한다.
         DP의 p147을 보면 '''Adapter'''클래스는 반드시 그것의 '''Adaptee'''를 타입으로 선언해서 가지고 있어야만 한다.이런 경우에는 해당 클래스와 그것에서 상속되는 클래스들만이 기능을 사용(adapt)할수 있다. Smalltalk에서 엄격한 형검사(Strong Typeing) 존재 않으면, class 가 '''Adapter'''에서 '''Adaptee'''로 보내어지는 메세지를 보낼수 있는 이상 '''Adaptee'''가 어떠한 클래스라도 상관없을 것이다. [[BR]]
         자 그럼 Adapter를 적용시키는 시나리오를 시작해 본다. ''Design Patterns''(DP139)에서 DrawingEditor는 그래픽 객체들과 Shape의 상속도상의 클래스 인스턴스들을 모아 관리하였다. DrawingEditor는 이런 그래픽 객체들과의 소통을 위하여 Shape 프로토콜을 만들어 이 규칙에 맞는 메세지를 이용한다. 하지만 text인자의 경우 우리는 이미 존재하고 있는 TextView상에서 이미 구현된 기능을 사용한다. 우리는 DrawEditior가 TextView와 일반적으로 쓰이는 Shape와 같이 상호작용 하기를 원한다. 그렇지만 TextView는 Shape의 프로토콜을 따르지 않는 다는 점이 문제이다. 그래서 우리는 TextShap의 Adapter class를 Shape의 자식(subclass)로 정의 한다. TextShape는 인스턴스로 TextView의 참조(reference)를 가지고 있으며, Shape프로토콜상에서의 메세지를 사용한다.; 이들 각각의 메세지는 간단히 다른 메세지로 캡슐화된 TextView에게 전달되어 질수 있다. 우리는 그때 TextShape를 DrawingEditor와 TextView사이에 붙인다.
         우리는 Tailored Adapter안에서 메세지를 해석을 위하여 해당 전용 메소드를 만들수 있다. 왜냐하면 디자인 시간에 Adapter와 Adaptee의 프로토콜을 알고 있기 때문이다. The Adapter class는 유일한 상황의 해석을 위해서 만들어 진다. 그리고 각각의 Adapter의 메소드는 Adaptee에 대한 알맞은 메세지들에 대하여 hard-codes(전용 함수 정도의 의미로 생각) 이다
         Adapter시나리오의 두번째는 Adaptee의 인터페이를 디자인 시간에 알수 없을 때 이다. Adaptee의 인터페이스를 먼저 알수 없기 때문에 우리는 하나의 인터페이스에서 다른 것으로 메세지를 간단히 해석할수 없다. 이런 경우에는 메세지의 변형과 전달의 일반적 규칙에 맞추어 Pluggable Adapter를 사용한다. Tailored Adapter와 같이 Pluggable Adapter도 해석기를 Client와 Adaptee사이의 해석기를 제공한다. 하지만 각각의 특별한 경우를 위한 새로운 Adapter클래스의 정의를 필요하지 않다. Pluggable Adapter가 쓰이는 경우의 상태를 생각해보자
  • C++스터디_2005여름/학점계산프로그램 . . . . 9 matches
          - 우리가 같은 클래스에 속하는 객체를 여러개 생성하기를 원할 때, 서로 독립된 객체 변수들을 개별적으로 생성하는 것보다 객체들로 이루어진 배열을 생성하는 것이 더 바람직할 것이다. 지금까지 우리가 사용해온 일반적인 배열과 사용법이 같다.
          - 다른 클래스에 속하는 객체를 클래스 멤버로 사용한다.
         정적 멤버
          - 정적 멤버 변수는 클래스의 바깥에 선언되어 있지만 클래스에 속하며 객체별로 할당되지 않고 모든 객체가 공유하는 멤버
  • Class . . . . 9 matches
         물 : '물'이라는 클래스.
         음.. 나만의 생각일지는 모르겠는데... 물 시리즈로 모델링을 한다면 물 클래스를 상속받는 지하수 클래스, 해수 클래스 등등으로 보통 가지 않남?;
         해수 : '해수' 라는 클래스.
          - 염분 : '염분' 이라는 클래스.
          클래스 '염분'
         염분 : '염분'이라는 클래스
          - 바닷물 속에는 다양한 원소들이 '염분'이라는 단어로 추상화된다. ->클래스.
  • DPSCChapter1 . . . . 9 matches
          * 어떤 클래스들이 frameworks로서 서로 잘 작동하는지에 대해
         '''디자인 패턴'''은 끊이없이 발생하는 클래스 구성상의 문제에 해결책을 제시하는 재사용할수 있는 실행 모델이나 아키텍처이다. 때로 패턴은 단독적이거나 하위 클래스 구조에서 어떻게 매서드 들이 함께 작용하는지를 묘사한다.; 아마도, 패턴상에서는 좀더 빈번히 다중 클래스나 그들의 인스턴스의 협력을 보여줄다.
         디자인 패턴은 새로운 패턴에 관해서 간단하게 원리를 표현하고, 패턴은 존재하는 모습을 꾸준히 설명한다.패턴은 세부내용에 들어가기 앞서, 좀더 큰 관점으로 이해를 할수있게 한다. 패턴은 우리가 좀더 큰 관점에으로 ㄸ 다른 디자이너들의 생각의 교환시 객체과 클래스가 어떻게 구성되어 있는지 묘사한다. 우리는 "싱글턴 메소드로 데이터 베이스 접근 부분을 구성했습니다." 그리고 "데이터 베이스 접근은 오직 하나의 인스턴스만이 접근하도록 해습니다. 그 클래스는 싱글 인스턴스의 방법 사용을 위해서 클래스 변수를 사용할것입니다. 그 클래스는 광역으로 광역으로 접근가능한 인스턴스로 될것이지만, ''나중고침''
         그 클래스는 그 인스턴스가 만들어지고... "고 말할수 있습니다. 당신은 어떻게 설명하겠습니까?
  • DelegationPattern . . . . 9 matches
         클래스에 대해 기능을 확장하는 두가지 방법중 하나이다. 하나는 상속이고 하나는 위임(Delegation) 이다. 상속을 하지 않아도 해당 클래스의 기능을 확장시킬 수 있는 방법이 된다.
         또한, 클래스 하나가 방대해질때, 적절하게 그 클래스의 책임을 다른 클래스들에게 위임해주는 것은 ["Refactoring"] 의 방법이 된다.
         DelegationPattern을 쓸 때 중요한 점은, DelegationPattern을 사용하는 클래스의 클라이언트는 그 클래스가 Delegation을 쓰는지 안쓰는지 몰라야 한다는 것이다. 즉, 우리에게 있어 DelegationPattern이 사용된 클래스는 여느 클래스와 동일하게 인식되고 사용되어져야 한다. 게을러서 남에게 자신의 숙제를 위임하는 학생은 절대 남들에게 그 사실을 노출해선 안된다.
  • DevelopmentinWindows . . . . 9 matches
          * 윈도우즈 프로그래밍을 하기 위해 필요한 함수들을 제공
          * 윈도우즈 API를 클래스로 포장하여 제공하는 클래스 라이브러리
          ||LPCSTR||NULL 문자로 끝나는 문자열 상수 포인터||
          ||LPSTR||NULL 문자로 끝나는 문자열 포인터||
          * 함수
          * 윈도우를 만드는 함수는 CreateWindow, 메시지를 보내는 함수는 SendMessage
          ||p & lp||포인터 변수||
  • Gof/Adapter . . . . 9 matches
         클래스의 인터페이스를 다른 필요한 클래스의 인터페이스에 맞게 변환해준다. Adapter 는 서로 호환성이 없는 인터페이스들끼리라도 같이 작동할 수 있게끔 해준다.
          * 이미 만들어져 있는 클래스를 사용하고 싶지만, 인터페이스가 원하는 방식과 일치하지 않을때.
          * 관련성이 없거나, 예측하지 못한 클래스들과 협동하는 재사용가능한 클래스를 생성하기 원할때. 이 경우 클래스들이 호환성을 가지는 인터페이스를 필요로 하지 않는다.
          * (object adapter 의 경우에만 해당) 현재 이미 만들어진 여러개의 subclass가 필요한 경우, 하지만 각각의 서브클래스들에 대한 인터페이스를 하는 것은 비효율적이다. 이 경우 parent class의 인터페이스를 adapt 할 수 있다.
         adapter 클래스는 하나의 interface를 다른 interface 에 적합하게 맞춰주기 위해 (말 그대로 어뎁터 역할~) 다중상속을 이용한다.
          * 해당 클래스를 이용하는 Client들은 Adapter 인스턴스의 operation들을 호출한다. adapter는 해당 Client의 요청을 수행하기 위해 Adaptee 의 operation을 호출한다.
  • LUA_6 . . . . 9 matches
          메타 테이블은 루아에서 테이블을 사용하는 연산자 재정의? 또는 python을 예로 들면 __add__, __sub__ 와 같은 함수라고 볼 수 있습니다. 테이블을 함수가 아닌 연산자로 조작 할 수 있게끔 해 줍니다.
         메타 함수는 __add 연산자 이외에 아래와 같은 연산자들이 있습니다.
         __unm : Unary 연산자 예를 들면 -1 의 -와 같은 피 연산자가 하나 인 연산자를 위한 meta 함수
         __newindex : 새로운 index가 추가 되었을 경우에 호출 되는 meta 함수
         2. 메타 테이블을 이용한 클래스
         우선 간단한 함수를 table 안에 만들어 보겠습니다.
         콜론이 ":" 이 함수에서 사용 될 경우는 함수의 파라미터로 self를 생략하게 할 수 있습니다.
  • MFC/CObject . . . . 9 matches
         MFC의 계층 구조의 최상단에 있는 클래스이다. 자바로 치자면 Object 클래스에 비슷한 클래스이다.
         이 클래스로부터 파생된 클래스는 다음의 3가지 레벨로 구분되는 기능이 있다.
         || DECLARE_DYNAMIC() || 런타임 클래스 정보를 지원한다. ||
         || DECLARE_DYNCREATE() || 런타임 클래스 정보와 동적인 객체 생성을 지원한다. ||
         || DECLARE_SERIAL() || 런타임 클래스 정보와 동적인 객체 생성, 그리고 객체들의 시리얼화를 지원한다. ||
          ''각각은 보조 매크로가 필요하며 DECLARE_ 대신 IMPLEMENT_ 접두사가 붙은 형태이다. 보조매크로는 클래스의 구현 파일 부분에 포함되어야 한다.''
  • OurMajorLangIsCAndCPlusPlus/stdio.h . . . . 9 matches
          == 함수 리스트 ==
         || 함수형식 || 용도 ||
         || int fgetpos(FILE *, fpos_t *) || 해당 스트림의 포인터의 위치를 fpos_t에 저장한다. ||
         || FILE * freopen(const char *, const char *, FILE *) || 세번째 인자의 스트림을 닫고 그 포인터를 첫번째 인자의 파일으로 대체한다. ||
         || int fsetpos(FILE *, const fpos_t *) || 해당 스트림의 포인터를 지정한 위치로 옮긴다. ||
         || int fseek(FILE *, long, int) || 해당 스트림의 포인터를 세번째 인자를 기준으로 두번째 인자만큼 옮긴다. SEEK_SET : 스트림 시작, SEEK_CUR : 현재 포인터 위치, SEEK_END : 스트림 끝 ||
         || long ftell(FILE *) || 해당 스트림의 포인터의 위치를 리턴 합니다. ||
         || void rewind(FILE *) || 해당 스트림의 처음으로 포인터를 이동한다. ||
  • PascalTriangle . . . . 9 matches
          /* 연산을 위해 이중 정수형 포인터 선언 */
          /* buffer에 행만큼의 정수포인터형을 할당받아 대입 */
          /* 각각의 정수 포인터에 정수 배열을 할당한다 */
          /* 정수 포인터 배열을 반환 한 후 */
          /* 정수 포인터 배열을 반환한다 */
          * 해결했습니다. 문제 없이 돌아가는군요.. 역시 포인터는 어렵고 어려워라..
         // 파스칼의 삼각형의 n행 m열의 값을 구하는 함수 (34행 까지 계산 가능)
          unsigned long *row[2]; // 2개의 배열의 포인터
         // 파스칼의 삼각형의 n행 m열의 값을 구하는 함수 (17행까지 계산 가능)
  • SpiralArray/Leonardong . . . . 9 matches
         TDD로 풀었다는 점이 기쁘다. 처음부터 너무 메서드를 어디에 속하게 할 지 고민하지 않고 시작한 것이 유용했다. 그 결과로 예전 같으면 생각하지 못했을 Direction클래스와 그 하위 클래스가 탄생했다. 또한 행렬은 최종 결과물을 저장하고 보여주는 일종의 뷰처럼 쓰였다.
         현재는 행렬 구성이 비효율적이다. 움직였던 기록을 가지고 행렬을 구성하기를 반복한다.이것을 수정할 때 좀더 효율적으로 작동하게 만들어야겠다. Mover클래스, Array클래스의 종료검사, 테스트 케이스는 확실히 Refactoring이 필요하다.
         지난 번 리팩토링 대상이었던 Mover클래스, Array클래스의 종료검사, 테스트 케이스를 리팩토링 했다. 테스트 케이스와 Array클래스는 쉽게 리팩토링 할 수 있었다. 하지만 Mover클래스를 손대는데 오래 걸렸다.
         goStraight 전 버전은 Direction클래스를 이용해서 이동한(벽을 만나면 이동하지 않음) 위치를 얻어내고, 이동한 기록을 저장하는 형식이었다. 벽에 대한 검사가 겹치는 것 같아 mover에서 바로 벽을 검사하고 벽에 들어서면 종료하는 것으로 만들었다. 그러고 보니 따로 카운트 할 필요가 없어 moveCount변수를 없앴다. mover가 종료 조건도 검사하는데 board 넓이만큼 이동했으면 끝나는 것이기 때문이다.
  • VisualBasicClass/2006/Exam1 . . . . 9 matches
         ㉢ 폼 위에서 마우스 포인터를 컨트롤을 두고 싶은 위치에서 클릭, 드래그하면 컨트롤이 나타난다.
         13. 서브프로그램과 함수에 관련된 설명 중 가장 부적절한 것은?(1점)
         ③ 함수는 수행한 결과를 호출한 프로그램에게 반한하는데 입력 인수는 여러 개일 수 있으나 출력 인수는 오직 하나이다.
         ④ 일반적으로 함수 이름이 F_Name일 경우, 이 함수 내부에는 F_Name = 식 형태의 할당문이 있어야 한다.
         16. 다음의 주어진 함수(용어)에 결과를 기록하시오.(3점)
         17. 날짜/시간 함수의 결과가 옳지 않은 것은? (7월 6일 오전 11시)(1점)
         18. 다음의 결과를 보고 ①~③번에 필요한 함수를 입력하시오.(* 단, '_' 기호는 공백임.)(3점)
         인터프리터이다 보니 평소에 많이 짜지 않는 이상 함수 하나하나의 특징을 잘 모르기 때문에...
  • 간단한C언어문제 . . . . 9 matches
         안옳다. 메인함수 정의가 잘못되어있다. -yahar
         C언어의 컴파일러에 따라 메인함수는 저렇게 쓰일 수가 있어요;;; 특정 컴파일러는 return형이 int형이 아니라고 warnning을 내기도 하죠;; - [이영호]
         옳다. 콘스트 캐릭터 별에이는 포인터의 주소 그러니까 &a 값만 변하지 않는거같다(아닌가;;)-[정수민]
         옳지않다. atof함수로 float변환은 되었지만, atof함수의 프로토 타입이 있는 헤더를 추가하지 않았기 때문에 int형으로 return된다. 즉, num엔 숫자 123이 담긴다. ANSI C99에서는 프로토타입이 선언되지 않으면 컴파일되지 않도록 변했다. - [이영호]
         안옳다. 단순히 포인터만 존재한다. -[정수민]
         옳지않다. 포인터만 있다. - [이영호]
         옳지 않다. static은 C++의 private와 비슷하다. 한 파일이나 특정 로컬함수에서만 쓰인다는 것을 표현한다. - [이영호]
         옳지않다. 함수의 프로토 타입이 정의되지 않았기 때문에 return형이 int형으로 바뀐다. 프로토타입은 return 타입을 컴파일러에서 알기 위해 쓰이는 것이다. - [이영호]
  • 객체지향분석설계 . . . . 9 matches
          영구적으로 저장되는 데이터를 선택한다. 이 자료들은 Entity 클래스가 된다.
          각 클래스간의 상관관계를 분석, Control 클래스와 Boundary클래스로 나누어 선택한다.
          * Control 클래스 : DB와의 연결, 객체의 컨트롤을 담당하는 클래스
          * Boundary 클래스 : 화면 UI를 담당하는 클래스
          위의 분석을 바탕으로 하여 Sequence Diagram을 개략적으로 작성한다. 역시 Actor와 각 클래스들을 미리 배치한 다음 필요한 조작들을분석한다.
  • 데블스캠프2011/둘째날/Machine-Learning/NaiveBayesClassifier/김동준 . . . . 9 matches
          // 들어온 데이터의 신뢰성을 체크하는 함수. 신뢰성이 없는경우 False 반환
          //자기 Section 이 아닌 내용을 Calculate 하는 함수. Index 에 반응하며 수행시 초기화 후 계산한다.
          //해당 단어에 대한 자기 Section 이 아닌 단어수를 Calculate 하는 함수. Index 에 대응하며 수행시 초기화 후 계산한다.
          //해당 기사에 대한 연산 결과를 반환하는 함수. 양수일 경우 해당 Index Section 에 일치하는 기사로 판단한 것이며, 음수일 경우 해당 Index Section 에 일치하지 않는 기사라고 판단한 것이다.
          // Ln[p(S) / p(!S)] 값을 계산하는 함수. Index 에 대응한다.
          // Sigma Ln[p(Wi ^ S) / p(Wi ^ !S)] 값을 계산하는 함수. Index 에 대응한다. 단 특정 단어에 대한 Advantage 를 부과한다. (Advantage 함수 참조)
          // 특정 단어에 대한 Advantage 부과함수. 해당 Index Section 에만 존재하는 단어일때 빈도에 따른 가산점을 부여한다. 가산은 해당단어수 / Section 전체기사수 * 50 이다.
          // 해당 File 변수에 대한 Index Section 과의 매치율을 보여주는 함수. 맞은 것과 틀린것, 그리고 그 것에 대한 판단 확률을 반환한다.
  • 새싹교실/2011/쉬운것같지만쉬운반/2011.3.29 . . . . 9 matches
          * 표준 입,출력 함수 중 대표 함수 설명~
          1. printf 함수의 작동 원리
          4. 다음 printf 함수와 scanf 함수 사용 중 틀린 것을 고르고, 제대로 고치시오.
          * 오늘은 표준 입출력 함수, 상수&변수의 의미와 각종 연산자들에 대해서 배웠다. 역시 배우면 배울수록 흥미롭다. 그런데 용운이는 다 알고있고 형준이는 안오고 뭔가 나만 배우고 있는 듯한 느낌이...... ㅜㅜ. 아무튼 지금은 무식해도 올해가 끝나갈 쯤엔 나도 C언어 마스터가 되야지. - 송치완
          * 내가 새싹할 때 설명을 안했던 부분이 있어서 발견을 못했구나 ! scanf함수 라인의 의미는 "10진수 정수형을 입력받아 x 변수에 저장하겠다."인데, 이때 x 앞에 &를 붙여줘야 돼. "x -> &x" 이렇게 바꿔줘야 돼~ - [박성현]
         1. 개행 문자(\n)는 printf 함수에서 줄을 넘길 때 사용합니다. 이것에 캐리지 리턴(\r)을 직접 타이핑하지 않는 이유는 printf 함수가 텍스트 모드로 출력하기 때문에 자동으로 캐리지 리턴이 앞에 붙게 되기 때문입니다.
  • 새싹교실/2012/도자기반 . . . . 9 matches
         그전에 헤더파일을 불러오는 부분(#include<stdio.h>)과 main함수의 형태(int main(void){return 0;})에 관해서도 설명했습니다.
         (stdio가 뭘 뜻하는지, 다른 헤더파일에는 무엇이 있는지 와 main앞에 int는 왜붙은건지 괄호안에 void는 뭔지 왜 마지막에 return 0;을 썼는지에 관해서 설명했습니다. 하지만 아직 함수를 안배워서 그런지 이해가 잘 가는것 같지는 않았지만 일단 이렇게 알아두면 된다고 했습니다.)
         마지막으로 입출력 기본 함수 사용법을 알려준 후 C수업시간에 한 예제들과 간단한 과제들을 직접 해보게 시켰습니다.
          * 다양한헤더파일을 설명해줬습니다. 2주차 예제에 새로 등장한 stdlib.h, time.h 에 포함되는 간단한 함수들을 설명했습니다. 그리고 #define을 쓰는 이유도 설명했습니다. 랜덤변수를 얻기 위한 rand함수와 사용법 등을 알려주면서 다시 한번 winapi.co.kr 에 대해서도 언급했습니다. 또한 srand(time(NULL))을 사용하여 씨드를 설정해줘야 매번 다른 값이 나오는 것도 설명 했습니다.
         구조체 선언 방법과 typedef를 쓰는 이유를 설명 하는데 구조체 예제 안에 배열이 있어서 배열에 대해서 먼저 설명했습니다. 배열의 이름이 갖는 의미와 인덱스로 접근가능한 자료구조라는 것을 설명했습니다. 그 다음으로는 미뤄왔던 함수에 대해서 설명했습니다. 이번에도 예제로 설명하려 했는데 파라미터로 포인터를 받아오기에 먼저 포인터에 관한 설명을 했습니다. swap예제를 사용하여 call by value 기반의 C에서 포인터를 사용하여 call by reference를 구현 할 수 있다고 설명했습니다. 그리고 배열접근 방법에 인덱스와 배열이름+숫자 로 접근하는 방법도 알려줬습니다.
  • 실습 . . . . 9 matches
         객체와 클래스 (성적 관리 프로그램)
         성적 관리하는 프로그램을 클래스(class)를 이용하여 C++로 작성하여 본다.
         1. 클래스(Class) 설계
         Member 함수
         입력함수 void Input(char szName[],int nKorean, int nEnglish,int nMath);
         총점 함수 int GetTotal(void);
         등수 함수 int GetRank(void);
         등수 기록 함수 void SetRank(int nRank);
         결과출력 함수 void PrintResult();
  • 이승한/PHP . . . . 9 matches
          * 다양한 SQL 함수가 지원된다.
          === 기타 함수 ===
          * flush() //버퍼를 비우는 함수 // 뭔지 모르겠다.
          === 시간및 날짜 관련 함수 ===
          === string 관련함수 ===
          === 함수 ===
          function 함수명(전달인자){ 함수내용; return 변수;} // Function 도 상관이 없었다. return은 없어도 돼며 type이 존재하지 않으므로 함수에 리턴타입은 존재하지 않는다.
  • 채팅원리 . . . . 9 matches
         ReceiveEvent : 클라이언트의 이벤트를 받는 부분이다. 이 이벤트가 StatusDisplay 클래스에 적용된다. 각각의 이벤트는 다음과 같다.
         Broadcast : 클라이언트끼리 주고받는 대화 내용을 전달하는 클래스이다.
         SendUser : 클라이언트 사용자가 현재 접속되어 있는 사람들의 ID를 알 수 있게 List에 사용자 이름을 보내주는 클래스이다.
         클라이언트쪽에는 4개의 Thread가 있다. JFrame을 사용한 클래스가 2개 있는데, 하나는 Login때 ID사용 허가를 확인한는 프레임이고, 다른 하나는 채팅의 기본 프레임이다. 4개의 Thread는 다음과 같다.
         ChatMain : 채팅의 주 인터페이스를 관리하는 클래스이다. 이 클래스에서 대부분의 GUI를 관리하고, 채팅메세지보여준다. 또한 채팅에 접속한 사람들의 ID를 보여준다.
         ReceiveMessage : 서버로부터 전달되는 메시지를 받아서 ChatMain 클래스의 메시지 출력 화면에 보여주는 역할을 한다.
         UserList : ChatMain 클래스의 사용자 List에 접속한 사용자 ID를 보여주는 기능을 한다.
         서버가 시작하면 ReceiveEvent 클래스에서 클라이언트로부터 전달되는 Event를 기다리는 동시에 StatusDisplay 쓰레드와 다른 쓰레드들을 시작한다.
  • 허아영/C코딩연습 . . . . 9 matches
         포인터 처리에 대한 연습
         • 포인터로 배열들의 요소를 지적하고 배열간의 자료교환을 하는 프로그램을 작성하시오.
         - 변수형과 포인터와의 관계, 포인터가 가리키는 대상의 크기 등을 보여주는 기능을 첨가하여 작성하시오.
         함수 이름을 막 짓던 습관을 버리기로했다.
         함수를 기능 별로 만들려는 습관은 가지기로 했다.
         === 팩토리얼(재귀함수 쓰지않고) ===
          >>팩토리얼- 재귀함수<<를 쓰지않고 !! */
         아직도 프로그래밍하는데 세미콜론을 빠트린다던지, scanf 함수를 쓸 때 변수앞에 &을 붙지지 않을 때가 다반사다.
  • 05학번만의C++Study/숙제제출/2 . . . . 8 matches
          * 평상시에는 문자열의 주소를 하나의 전달인자로 취하여, 그 문자열을 한 번 출력하는 함수를 작성하라. 그러다가 0이아닌 int형 값을 두 번째 전달인자로 제공하면, 그 시점에 도달할 때까지 그 함수가 호출되었던 횟수만큼 그 문자열을 반복해서 출력한다. (문자열이 출력되는 횟수는 두 번째 전달인자의 값이 아니라 그 함수가 호출되었던 횟수와 같다.)물론 이 함수는 거의 쓸모가 없다. 하지만 이것은 이 장에서 설명한 몇 가지 프로그래밍 기술을 사용할 것을 요구한다. 이들 함수를 사용하여 함수의 작동을 보여 주는 간단한 프로그램을 작성하라
          * 여기서 질문!! 전달인자가 1개인 함수와 2개인 함수만들어 오버 로딩 하라는 것인가? 그게 아니라면... cin을 라인별로 입력 받아햐겠는데.. 어떤때는 변수를 하나만 받고 어떤때는 변수를 두개 받아야하니.. 라인별로 처리 해야할듯.. 하지만 라인별로 처리해도....;;;; 음... 생각이 떠오르지 않음..;;; 쳇..;;[[BR]] 어제 교수가 defalte 에 대해 설명했던거 같은데.. 전달인자를 취하지 않으면 이미 입력된 변수의 값으로 처리한다. 라고...;; 음..;;;이렇게 해야하나?
  • 5인용C++스터디/키보드및마우스의입출력 . . . . 8 matches
          소스를 입력한 후 실행해 보자. 키보드에서 키를 누르면 입력한 문자들이 화면 상단에 출력될 것이다.WndProc을 보면 우선 문자열 str이 선언되어 있으며 이 문자열 변수에 사용자가 입력한 문자들을 모은다. 단 이 변수는 WndProc에 선언되어 있는 지역변수이므로 그냥 선언하면 메시지가 발생할 때마다 초기화되기 때문에 static을 붙여 정적변수로 만들어 두어야 한다. 아니면 아예 WinMain 함수 이전에 선언하여 전역 변수로 만들어 두어도 된다.
          키보드 메시지에서는 str배열에 문자열을 집어 넣기만 하며 문자열을 화면으로 출력하는 일은 WM_PAINT에서 맡는다. 단 키보드 메시지에 의해 문자열이 다시 입력되더라도 화면상의 변화는 없으므로 WM_PAINT메시지가 발생하지 않는다. 그래서 강제로 WM_PAINT 메시지를 발생시켜 주어야 하는데 이 때는 InvalidateRect 함수를 호출해 주면 된다. WM_CHAR에서 문자열을 조립한 후 InvalidateRect 함수를 호출해 주어 키보드가 입력될 때마다 화면을 다시 그리도록 하였다.
         GetMessage는 메시지 큐에서 메시지를 꺼내온 후 이 메시지를 TranslateMessage 함수로 넘겨 준다. TranslateMessage 함수는 전달된 메시지가 WM_KEYDOWN인지와 눌려진 키가 문자키인지 검사해 보고 조건이 맞을 경우 WM_CHAR 메시지를 만들어 메시지 큐에 덧붙이는 역할을 한다. 물론 문자 입력이 아닐 경우는 아무 일도 하지 않으며 이 메시지는 DispatchMessage 함수에 의해 WndProc으로 보내진다. 만약 메시지 루프에서 TranslateMessage 함수를 빼 버리면 WM_CHAR 메시지는 절대로 WndProc으로 전달되지 않을 것이다.
         마우스 메시지는 lParam의 상위 워드에 마우스 버튼이 눌러진 y좌표, 하위 워드에 x좌표를 가지며 좌표값을 검출해 내기 위해 HIWORD, LOWORD 등의 매크로 함수를 사용한다. 즉 마우스 메시지가 발생한 위치의 좌표는 (LOWORD(lParam), HIWORD(lParam))이 된다.
  • CppStudy_2002_1 . . . . 8 matches
          * C++의 클래스 부분을 미리 여러가지 과제들과 함께 같이 공부하는 공간입니다.
         || 7.18 ||8.함수의 활용(104page)|| 458P ~ 460P 프로그래밍 연습 + ???? ||
         || 7.25 ||9.객체와 클래스(60page)|| ["BusSimulation"] ||
         || 8.1 ||10.클래스를 사용하자(64page)||["StringOfCPlusPlus"] ||
         || 8.9 ||11.클래스와 동적 메모리 할당(76page)||["LinkedList"] ||
         || 8.16 ||12.클래스 상속(72page)|| ["LinkedList/StackQueue"][[BR]]C++2팀과의 프로그래밍 잔치? 링크드 리스트로 스택,큐 구현||
         상협. [STL/string|String] 클래스의 스펙을 어떻게 주었는지? 사람들이 왜 전부 String 이용 프로그램 GOD 클래스를 만드는걸까 궁리.
  • Gof/Visitor . . . . 8 matches
         이러한 operations들의 대부분들은 [variable]들이나 [arithmetic expression]들을 표현하는 node들과 다르게 [assignment statement]들을 표현하는 node를 취급할 필요가 있다. 따라서, 각각 assignment statement 를 위한 클래스와, variable 에 접근 하기 위한 클래스, arithmetic expression을 위한 클래스들이 있어야 할 것이다. 이러한 node class들은 컴파일 될 언어에 의존적이며, 또한 주어진 언어를 위해 바뀌지 않는다.
         이 다이어그램은 Node class 계층구조의 일부분을 보여준다. 여기서의 문제는 다양한 node class들에 있는 이러한 operation들의 분산은 시스템으로 하여금 이해하기 어렵고, 유지하거나 코드를 바꾸기 힘들게 한다. Node 에 type-checking 코드가 pretty-printing code나 flow analysis code들과 섞여 있는 것은 혼란스럽다. 게다가 새로운 operation을 추가하기 위해서는 일반적으로 이 클래스들을 재컴파일해야 한다. 만일 각각의 새 operation이 독립적으로 추가될 수 있고, 이 node class들이 operation들에 대해 독립적이라면 더욱 좋을 것이다.
         우리는 각각의 클래스들로부터 관련된 operation들을 패키징화 하고, traverse 될 (tree 의 각 node들을 이동) abstract syntax tree의 element들에게 인자로 넘겨줄 수 있다. 이를 visitor라고 한다. element가 visitor를 'accepts' 할때 element는 element의 클래스를 인코딩할 visitor에게 request를 보낸다. 이 request 또한 해당 element를 인자로 포함하고 있다. 그러면 visitor는 해당 element에 대한 operation을 수행할 것이다.
         예를든다면, visitor를 이용하지 않는 컴파일러는 컴파일러의 abstact syntax tree의 TypeCheck operation을 호출함으로서 type-check 을 수행할 것이다. 각각의 node들은 node들이 가지고 있는 TypeCheck를 호출함으로써 TypeCheck를 구현할 것이다. (앞의 class diagram 참조). 만일 visitor를 이용한다면, TypeCheckingVisior 객체를 만든 뒤, TypeCheckingVisitor 객체를 인자로 넘겨주면서 abstract syntax tree의 Accept operation을 호출할 것이다. 각각의 node들은 visitor를 도로 호출함으로써 Accept를 구현할 것이다 (예를 들어, assignment node의 경우 visitor의 VisitAssignment operation을 호출할 것이고, varible reference는 VisitVaribleReference를 호출할 것이다.) AssignmentNode 클래스의 TypeCheck operation은 이제 TypeCheckingVisitor의 VisitAssignment operation으로 대체될 것이다.
         VisitorPattern으로, 개발자는 두개의 클래스 계층을 정의한다. 하나는 operation이 수행될 element에 대한 계층이고 (Node hierarchy), 하나는 element에 대한 operation들을 정의하는 visitor들이다. (NodeVisitor hierarchy). 개발자는 visitor hierarchy 에 새로운 subclass를 추가함으로서 새 operation을 만들 수 있다.
  • HardcoreCppStudy/두번째숙제/ConstructorAndDestructor/변준원 . . . . 8 matches
         클래스의 인스턴스가 생성되었을때에 즉, 객체가 생성될때 호출됩니다.
         해당하는 함수나 메인에서 생성이될때 호출이 되죠. 이때, default 생성자와
         그 클래스의 인스턴스가 생성된 함수가 사라질때 자동적으로 사라지게 됩니다.
         만일 메인함수에서 객체를 생성하였다면 메인함수가 사라질때 호출이 되고,
         클래스에서 절때 빼놓으면 안되는 경우로, 위에 간단한 코드에서 빼 놓았습니다.
         대입연산자나 함수를 호출할때, new 연산자에 의해 생성됩니다.
  • JavaScript/2011년스터디/7월이전 . . . . 8 matches
          * 오늘은 PairProgramming으로 [http://probablyinteractive.com/url-hunter URLHunter]를 만들어보았는데 setInterval 함수를 사용하여 계속 페이지 주소를 바꿔주는 부분까지 성공했습니다. 처음에는 setTimeout 함수를 사용해서 생각처럼 제대로 작동하지 않았어요. 다음주엔 새내기가 스터디에 합류할텐데 매우 기대됩니다. 우리가 했던것들을 설명해주고 같이 [http://probablyinteractive.com/url-hunter URLHunter]를 만들어보려고 해요. 시간이 너무 걸리지 않도록 어떻게 접근할지 주말에 미리 생각해보겠습니다. - [김수경]
          * 오늘은 새 멤버가 두명 합류했습니다. 기쁘기도 하고 앞으로 스터디를 어떻게 진행해야할지 고민도 조금 되네요! /URLHunter는 점점 그럴듯해지고 있습니다. 지난시간에 문제가 됐던 부분을 해결했어요. 다만 급하게 문제를 해결해나가느라 코드가 지저분해진 게 문제네요. 다음주에 기능이 다 구현될 것 같은데 코드 정리도 좀 해야겠습니다. - [김수경]
          * 함수가 프로퍼티로 사용될 수 있다??-43p 라는 표현이 있는데 그게 어떤 것인지 잘 모르겠더라구요.
          * 저희는 저번주 숙제로 함수까지와 바로뒤 객체까지 새로 공부해보았는데요. 둘다 이 명령어들은 대체 뭔가, 이건 무슨뜻이야?! 가 다반사였습니다. 이해할 수 없는 명령어들은 나중에 다시 나올것이라 가정하고(..) 몇몇개 넘어갔구요. 개념적인 것에서 불리언, 함수, 객체, 프로퍼티등에 대해서 다시 고민해봤어요. 우선 문자열로 숫자를 써놓고 그것을 연산하면 숫자로 바뀐다는 것이 어떤 것인지 좀 명확히 해보았구요, 불리언은 T/F==1/0라는 것에 대해도 보았지요. 함수는 C에서 배웠던 것과 유사해서 크게 어려움은 느끼지 않았구요(앞에 함수 선언을 할 필요가 없더군요!). 문제는 객체/프로퍼티 였는데, 뒤에있는 예제들을 통해 어떤 객체의 속성? 쯤으로 프로퍼티가 있다는 결론을 내렸어요. (이것을 토대로 코딩해보았을때도 저희 예상대로 나왔지요.) ..또 띄어쓰기 문제때문에 한참 고민한 것도 생각나네요. -[김태진]
  • MoreMFC . . . . 8 matches
         그럼 이제 이 책에서 처음 나오는 MFC programming source를.. 공개 한다. Dialog based로 프로젝트를 연후 Dialog에 관한 class는 project에서 뺀후 App클래스내에 이 source를 쳐주면 될것이다. - 신기 하게도 App class와 MainWindow클래스만 있다. 이런 source는 처음 봐서 생소 했지만, MFC에서 제공해주는 source보다는 깔끔해 보였다.-
         // CWinApp::InitInstance를 override한 가상함수이다.
         떡하니 source를 보면 어떻게 돌아가는 거야.. --; 라는 생각이 든다.. 나도 잘모른다. 그런데 가장 중요한것은 global영역에 myApp라는 변수가 선언되어 있다는 사실이다. myApp 라는 instance가 이 프로그램의 instance이다. --a (최초의 프로그램으로 인스턴스화..) 그리고, CWinApp를 상속한 CMyApp에 있는 유일한 함수 initInstance 에서 실제 window를 만들어준다.(InitInstance함수는 응용 프로그램이 처음 생길 때, 곡 window가 생성되기전, 응용 프로그램이 시작한 바로 다음에 호출된다) 이 부분에서 CMainWindow의 instance를 만들어 멤버 변수인 m_pMainWnd로 pointing한다. 이제 window는 생성 되었다. 그렇지만, 기억해야 할 것이 아직 window는 보이지 않는다는 사실이다. 그래서, CMainWindow의 pointer(m_pMainWindow)를 통해서 ShowWindow와 UpdateWindow를 호출해 준다. 그리고 TRUE를 return 함으로써 다음 작업으로 진행 할 수 있게 해준다.... 흘. 영서라 뭔소린지 하나도 모르겠네~ 캬캬.. ''' to be continue..'''[[BR]]
         그리고, 그 다음으로 진행되는 것이. CMainWindow에 있는 OnPaint라는 함수. window의 client 영역에 무언가를 그리는 함수가 호출된다. (그 전에 이것 저것 많이 있겠지만... 뭐 매크로를 통해 messagemap 관련 entry라던지.. 이런것들을 선언해 주는 작업.. --a) 그래서, DrawText를 이용해 화면 중앙에 "Hello, MFC"를 그린다. 그러면 이 프로그램의 기능(?)은 끝이다.[[BR]]
  • SuperMarket/인수 . . . . 8 matches
         // map<string, Cmd*> 이런식으로 string에는 커맨드를,Cmd 클래스는 HelpCmd클래스, Deposit클래스 등등의 부모 클래스, 즉 명령 클래스들의
         // 조상 클래스포인터로 넣어줬습니다. 동적 바인딩을 하기 위해서..--; Parser생성할때 map 테이블에다 명령들을 넣어주면서 그 명령에
         // 해당하는 클래스를 동적 할당해주면서 넣었습니다. 소멸자에서는 해제하는 것도 잊지 않았구요. 나름대로 상당히 고민을 했지만..--;
  • UpdateWindow . . . . 8 matches
         일반적으로 하노이의 탑은 재귀함수 알고리즘이 가장 쉽기 때문에, 재귀함수를 사용하여 짜고 있었다.
         재귀함수가 실행될때마다 Invalidate()를 호출하도록 해 두었는데. 화면 갱신은 재귀함수가 끝난 경우에만 하고 있었다.
         [상규]군에게 물어 해답을 찾았다. Invalidate()함수는 다음 WM_PAINT메세지가 왔을때 화면을 다시 그리도록 명령하는 함수이다. 재귀나 반복문을 수행하는 동안에는 WM_PAINT 메세지가 발생하지 않기 때문에 강제적으로 WM_PAINT메세지를 발생시켜 주어야 하는데, 그 함수가 UpdateWindow()함수이다.
  • VisualStuioDotNetHotKey . . . . 8 matches
         ==== 클래스 뷰 ====
         Shift+Alt+F12 : 이거 찾기보다 좋더군요. 함수나 define등 아무거나에서 사용
         ==== 소스파일의 함수헤더만 보이기 ====
         Ctrl-M, Ctrl-L : 소스파일의 함수헤더만 보이기 (구현부는 감추고) (토글 키)
         ==== 함수툴팁 강제 호출 ====
         Ctrl-Shift-Spacebar : 함수이름편집중 '''툴팁'''으로나오는 함수와매개변수설명이 안나올경우, 강제로 나오게
         현 함수를 빠져나감.
  • WOWAddOn/2011년프로젝트/초성퀴즈 . . . . 8 matches
         아래 함수는 문자열이 들어오면 몇 byte를 차지해주는지 알려주는 함수이다
         Addon이 적재되면 해당 프로그램 전체가 올라간것이기 때문에 WOW 메모리에 할당이 되있다. 따라서 Addon에서 flag는 따로 메모리를 할당 받았다는 얘기. 따라서 전역 변수는 addon의 함수 어디서든 접근이 가능하단 소리가 된다.
         === 자동 Update함수 찾고 timer찾기 ===
         우선 와우에서는 API설명상. Addon에 Sleep을 걸어놓으면 전체 시스템이 멈추는것으로 되어있다. 그렇다면 쓰레드를 만들어서 Sleep을 했다가. 복귀하면 하는건 어떨까? 우선 Sleep을 Lua의 System함수 패키지인 OS에서는 지원해주지 않는다.
         2주를 찾아서 자동으로 0.1초나 0.2초사이에 자동으로 Check를 해주는 함수를 찾아해매었다.
         자 Frame에 OnUpdate라는게 있고 OnUpdate가 실행될때마다 HelloWoW_OnUpdate라는 함수를 실행해준다.
         OnUpdate에 적용할 함수를 만들고 가상 프레임이 아닌 실제 프레임을 툴로 만들어 생성하게 하면
  • 데블스캠프2010/둘째날/후기 . . . . 8 matches
          * 엘리베이터 2단계는 대충 편법으로 넘어갔는데 3단계 으악 ㅋㅋㅋ 엘리베이터 클래스 자체는 그럭저럭 만들었는데 오히려 메인함수에서의 제어 면에서 좀처럼 해결책이 떠오르지가 않았다. 그보다 문제 잘못 이해했네 orz - [박근수]
          * 새싹 때 배웠던 클래스를 처음으로 써봤어요. 처음엔 층을 프라이빗으로 해서 사용했는데 엘리베이터를 2개 만들 때 순위권을 노리는 매의 눈을 장착하고 퍼블릭으로 바꿨던거가 아쉬웠어요. 가까운 엘리베이터 비교하는데 어쩔 수가 없더라구요...다음에는 좀 더 개선해서 엘리베이터 클래스에 2개의 층을 저장하도록 개선해보는것도 좋을것 같아요 - [백주협]
          * 개인적으로는 직접 게임의 코드를 짜는 모습을 보거나 라이브러리 함수를 사용하는 것을 좀 더 많이 볼 수 있었으면 좋지 않았을까 하는 아쉬움이 컸습니다. 그래도 이런 식으로 외부 라이브러리를 받아서 VS의 설정을 하고, 개발환경을 갖추는 것도 하나의 큰 공부가 되지 않았나 싶습니다. 그리고 소스코드 자체도 하나씩 뜯어보면 알아보기 쉬운 디자인으로 되어 있어서 조금 더 공부를 할 동기가 될 수 있지 않을까 싶습니다. - [서민관]
          * 너무어려웠습니다... 하지만 요점은 알겠네요. 함수는 20줄이상 넘어가면 안된다는것!! 근데 그것밖에 모르겠네요.. 망할 포인터!! - [양아석]
          * 그동안은 함수, 구조체, OOP에대해 알기만했지 왜 써야하는지 잘 이해를 못했는데 지금당장 코딩할때 잘 활용하지는 못하겠지만 왜 써야하는지에대해 이해하게 되었습니다. - [경세준]
  • 레밍즈프로젝트/프로토타입/파일스트림 . . . . 8 matches
         CFile 클래스 내의 Write() 함수를 이용해서 'A' ~ 'Z' 까지 써 넣는 함수 (OnWriteFile())와,
         파일에 쓰여진 'A' ~ 'Z'까지 불러들여서 화면에 출력하는 함수 (OnReadFile()) 함수이다.
         위의 OnWriteFile()에서 쓰여진 Open() 함수와 Write() 함수를 쓰게 될것 같다.
         기본적인 Read() 함수도 사용할 것 같다.
  • 새싹교실/2012/열반/120319 . . . . 8 matches
         == main 함수 ==
         == printf 함수 ==
          * 출력을 위한 함수
          * printf 함수가 명시적으로 정의되지 않았기 때문에 컴파일에 실패하거나, 경고가 뜸.
          * 함수들을 쓸 수 있도록 함.
          * .h : 함수들의 집합
          * else if, 전역 변수, 함수
          * 재귀함수를 이용한 반복문을 먼저 설명하려 합니다.
  • 새싹교실/2012/열반/120326 . . . . 8 matches
         == 함수 ==
         int f(int x); // 정수(정의역) x를 인자로 받아 정수(공역)를 반환하는 함수 f 를 '선언' 한 것입니다.
          * 함수 내에서 값을 반환하기 위해 쓰이는 키워드입니다.
         int f(){ // 정수 5를 반환하는 함수 f 입니다.
          * 재귀함수
          * 재귀함수를 통한 별 찍기
          * 이번 수업에는 많은 내용을 못다룬 것 같습니다. 저번 시간에 결석한 민규에게 보충수업을 안해줘서 수업이 약간 디뎌진 것 같습니다. 또 함수의 개념을 새싹들이 어렵게 느끼는 것 같습니다. 변수의 스코프를 가르친 뒤 재귀함수로 별찍기를 해볼까 합니다.
  • 새싹교실/2013/이게컴공과에게 참좋은데 말로설명할 길이 없네반 . . . . 8 matches
          > 배열에 도달했을때, 이제 속도를 죽이고 천천히 포인터와 엮어서 설명한다.
          > 그리고 포인터까지 설명을 끝내면, 이제 게임을 만든다.
          > 이런 게임을 발전시키는 방향으로 포인터 연습
         - 진도 : 컴퓨터 역사, 컴퓨터 언어의 역사, 컴퓨터 구조(미약하게.. 운영체제가 뭔지, 메모리가 뭔지, 컴퓨터가 뭔지.), 자료형, main함수(기본 구조)
         - 진도: 캐스트 형변환과, 자동 형변환 방식, 리턴값이 왜 필요한지 예시를 통한 설명(함수약간설명)
         - 진도 : 복습, 여러가지 함수 가르쳐줌.(puts, getch, gotoxy, Sleep)
         - 앞으로의 방향 : 이제 문제를 풀면서 메모리의 구조를 다시 전반적으로 설명하고, 입출력방식, 간단한 알고리즘(유클리드 호제법같은)을 가르친다. 이렇게 준비를 한후 포인터에 돌입. 그리고 포인터에 대해서 이해가 어느정도 쌓였을때 발전시킬 수 있는 프로그램을 만들게 하면서 실력을 증가시킨다.
  • 스네이크바이트/C++ . . . . 8 matches
         == 클래스 연습 ==
          int getTotal(); //총점을 구하는 함수
         === 클래스안에서의 스태틱 ===
         == 포인터 ==
         배열포인터
         포인터++
         포인터 배열
         구조체 포인터
  • 이영호/개인공부일기장 . . . . 8 matches
         ☆ 구입해야할 책들 - Advanced Programming in the UNIX Environment, Applications for Windows, TCP/IP Illustrated Volume 1, TCP/IP Protocol Suite, 아무도 가르쳐주지않았던소프트웨어설계테크닉, 프로젝트데드라인, 인포메이션아키텍쳐, 초보프로그래머가꼭알아야할컴퓨터동작원리, DirectX9Shader프로그래밍, 클래스구조의이해와설계, 코드한줄없는IT이야기, The Art of Deception: Controlling the Human Element of Security, Advanced Windows (Jeffrey Ritcher), Windows95 System Programming (Matt Pietrek)
         ☆ 레퍼런스 - 리눅스 공동체 세미나 강의록, C언어 함수의 사용법(함수 모음), 데비안 GNU/LINUX, C사용자를 위한 리눅스 프로그래밍, Add-on Linux Kernel Programming, Secure Coding 핵심원리
         3일 (수) - Real Time Signal (기초) - fcntl, umask, 등의 함수에 대한 깊은 공부가 필요함.
         28 (목) - C++(연산자 오버로딩, 연산자 오버로딩으로 String 클래스 디자인 해보기.)
         26 (화) - Compilers, C++(다양한 Virtual 상속, Class의 메모리 구조-C의 구조체와 대비하여/Class는 구조체로 포인터함수를 사용해 구현한 메모리 구조와 비슷하다.)
         - 26 (화) - malloc, new로 생성되어지는 메모리 구조. dynamic memory alloc은 변수(클래스)앞 1WORD(32비스에서 4바이트) 앞에 정보(크기, 위치, 사용)를 저장한다.
  • 05학번만의C++Study . . . . 7 matches
         7. 함수-C++의 프로그래밍 모듈
         8. 함수의 활용
         10. 객체와 클래스
         11. 클래스의 활용
         12. 클래스와 동적 메모리 할당
         13. 클래스의 상속
         16. string 클래스와 표준 템플릿 라이브러리
  • 10학번 c++ 프로젝트 . . . . 7 matches
          * 현재 시각일떄의 버튼 입력함수[김정욱]
          * 초시계 함수[박정근]
          * 초시계일때의 버튼입력 함수[박재홍]
          * 알람 설정 함수[김정혜]
          * 알람 설정 일떄의 버튼입력 함수[윤종하]
          * 3부분 전부 연결 성공했으나, 초시계를 클래스로 묶으면 에러가 발생.
          * 초시계 클래스 문제 해결해야지..
  • 2dInDirect3d/Chapter2 . . . . 7 matches
          이 객체는 IDirect3D 객체와는 달리 실질적일 일을 하는 객체이다. 이 객체를 생성하는 함수는 다음과 같다. IDirect3D 객체는 이것을 생성하기 위해 존재한다고 해도 과언이 아니다.
          3. pPresentationParameters는 D3DPRESENT_PARAMERTERS의 포인터형이다. 저것은 Device의 형태를 결정하는 구조체이다.
          5. 다 사용한 이후는 꼭!! '''Release()'''함수를 사용하여 사용을 해제시킨다.
          2. D3DVIEWPORT8 객체는 멤버는 다음과 같다.
          백버퍼를 싹 지우는 함수를 보자
          백버퍼에 그림이 들어오거나 클리어 한 경우엔 그것을 앞으로 끌고나와야 한다. 그것을 하는 함수가 Present함수이다.
  • CNight2011/윤종하 . . . . 7 matches
         == 포인터 ==
          * 다중포인터포인터포인터포인터포인터의 ... 포인터이다.
  • COM/IUnknown . . . . 7 matches
         COM 객체를 다루는데 있어서 가장 핵심적인 인터페이스. REFIID 를 이용해 ID 에 맞는 인터페이스 포인터를 얻을 수 잇다.
         COM 객체를 다른 포인터에 할당하거나 NULL 로 초기화 할 때 호출하여 참조카운터를 올바르게 유지해야만 객체의 정상적인 소멸을 보장할 수 있다.
         ※ 이론적인 내용은 C++ 의 스마트 포인터 파트를 참조. 참조카운팅의 용도와 필요성에 대해서 숙지한다.
         C++ 스마트 포인터에서는 참조 카운팅을 이용해서 dangling pointer 문제를 해결한다. boost 의 shared_ptr이 이를 구현한다.
         IUnknown 은 구현체가 유효한 기간동안 인터페이스 포인터를 변경시키면 안된다.
         인터페이스 포인터는 '''QueryInterface(IID_IUnknown, (void**) &pIUnknownInterface)''' 를 통해서 얻을 수 있으며, 이의 유효를 검사하는 것이 가능하다.
         정상규현된 컴포넌트라면 인터페이스 포인터를 비교하는 것을 통해서 각 객체가 같은 컴포넌트의 인스턴스인지 확인이 가능하다.
  • Cpp/2011년스터디 . . . . 7 matches
          * 클래스에 관해 공부하고, 그걸 토대로 프로그램을 짜본다.
          * 클래스부분을 간단하게 공부해봄.
          * 움직이는 블럭을 클래스화해서 짜려고 하는 중.
          * 태진이 한텐 좀 미안한데 혼자서 따로 만들어 보고 있었다. X코드와 VS2008은 서로 다른점이 너무 많아서 둘이 같이하면 이래저래 진행이 안될것 같아서; 움직이는 블록과 이미 자리잡은 블럭(+배경) 그리고 이들을 움직이게 하는 함수. 이렇게 3개를 class화 했다. 이 중 이미 자리를 잡은 블럭은 다른 두개의 객체에서 접근가능하면서, 유일하게 하나만 존재해야 했다. 그래서 찾아본결과. 싱글톤 패턴이란게 있어서... 이것 때문에 하루동안 고생했다. 어쨋든 성공 ㅋㅋ 뭔가 끝이 보이는 느낌이다. 근데 왠지 완성시키고 나면 종나 느릴것 같아..
          * 보니까 동적할당한답시고 포인터형만 선언해놓고 정리를 안함
          * 이때서야 깨달았다. 아 함수만 선언해놓고 순서를 안정해 놨구나.
          * Set함수에 false를 반환하는것도 대충해놨었고. false를 받았을시 작업도 안 설정 해놨었다.. 으아
  • DirectDraw/DDUtil . . . . 7 matches
         DXSDK에서 제공하는 함수 모음집.(ㅡ.ㅡa) (Direct Draw 의 Wrapping Class 가 되겠지요.)
         DDUtil안에는 두개의 클래스가 있다
         CDisplay의 함수에는 다음과 같은 것이 있다.
          위의 Blt함수들은 백 버퍼에 출력하는 함수들이다. 모든 내용을 백 버퍼에 출력했으면 다음 함수들을 사용하자
          CDislpay의 멤버 m_rcWindow를 갱신한다. 저 CRect형 변수에는 윈도우의 크기가 들어있다.
  • HanoiProblem . . . . 7 matches
          * 재귀함수에 대한 이해
         '''재귀함수에 대한 이해'''
         재귀함수가 사용되는 대표적인 예 몇가지를 보여줍니다. 재귀함수 사용에도 그 종류가 다른데, 대표적인 종류들을 보여주는 것이 중요합니다. "아, 재귀함수라는 것이 이렇게도 사용될 수 있구나!" 퍼뮤테이션/콤비네이션, 피보나치수열, 트리검색, 팩토리알, 조건문과 재귀호출로 반복문(while) 만들기 등이면 충분하지 않을까 합니다.
         그리고 재귀함수를 만들 때 유의점과 사고보조물을 가르쳐 줍니다. 유의점이라면 재귀함수는 리턴되는 값의 종류(타입)가 모두 동일해야 한다는 것, 재귀호출을 벗어나는 지점 근방에서 유의해야 한다는 점 등이고, 사고보조물로는 스택의 상태를 그림으로 그리는 방법이나, 수식을 사용하는 방법 등이 있겠죠.
  • Java Study2003/첫번째과제/곽세환 . . . . 7 matches
         자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이해하기 난해한 특성들을 제거함으로써 기존의 프로그램 개발자들이 쉽고 간단하게 프로그램을 개발할 수 있도록 합니다.
         자바는 컴파일 시에 에러 검사를 철저하게 하고, 실행 시에 발생할 수 있는 에러에 대해서도 실행 시에 철저하게 검사를 수행함으로써 신뢰도가 높은 프로그램을 작성할 수 있도록 해 줍니다. 또한, C/C++ 프로그램 개발자들을 가장 혼란스럽게 하고, 프로그램의 치명적인 오류를 발생시킬 수 있는 포인터포인터 연산을 자바에서는 사용하지 않게 함으로써, 포인터를 사용함으로써 프로그래머가 범할 수 있는 오류를 없앴다는 것입니다.
         자바의 다중 스레드 기능은 동시에 많은 스레드를 실행시킬 수 있는 프로그램을 만들 수 있도록 해 줍니다. 자바는 동기화 메소드들을 기본적으로 키워드로 제공함으로써, 자바 언어 수준에서 다중 스레드를 지원해 줍니다. 자바 API에는 스레드를 지원해 주기 위한 Thread 클래스가 있으며, 자바 런타임 시스템에서는 모니터와 조건 잠금 함수를 제공해 줍니다.
  • OurMajorLangIsCAndCPlusPlus/Class . . . . 7 matches
         === 구조체에서 클래스로 ===
         private - 클래스 멤버만 사용 가능
         === static 멤버 ===
         === const 멤버 함수 ===
         === this 포인터 ===
  • OurMajorLangIsCAndCPlusPlus/Function . . . . 7 matches
         === static 함수 ===
         - 해당 파일 내에서만 유효한 함수
         === 함수의 오버로딩 (C++) ===
         === 템플릿 함수 (C++) ===
         === 인라인 함수 (C++) ===
         === 함수 포인터 ===
  • PerformanceTest . . . . 7 matches
         상기 두 Windows API함수를 사용해서 수행 시간을 측정 할 수 있습니다.
         다음은 Binary Search 의 퍼포먼스 측정관련 예제. CTimeEstimate 클래스를 만들어 씁니다.
         == ftime함수, timeb 구조체의 사용 ==
         비교적 CPU와 OS에 의존적이지 않은 방법으로는 ftime 함수와 timeb 구조체를 사용하는 방법이 있습니다. 밀리세컨드 단위까지 밖에 제공되지 않습니다. sys/timeb.h 헤더에 정의된 내용이 ANSI C 는 아니라고 알고있습니다.
         === ftime 함수의 프로토타입 ===
         === ftime 함수와 timeb 구조체 사용 예 ===
         멀티쓰레드로 인해 제어권이 넘어가는 것까지 고려해야 한다면 차라리 도스 같은 싱글테스킹 OS에서 알고리즘 수행시간을 계산하는게 낫지 않을까 하는 생각도 해봅니다. (하지만, 만일 TSR 프로그램 같은 것이 인터럽트 가로챈다면 역시 마찬가지 문제가 발생할듯..) 그리고 단순한 프로그램의 병목부분을 찾기 위한 수행시간 계산이라면 Visual C++ 에 있는 Profiler 를 사용하는 방법도 괜찮을 것 같습니다. 해당 함수들의 수행시간들을 보여주니까요.
  • PluggableBehavior . . . . 7 matches
         한 클래스의 다른 객체들은 일반적으로 서로 다른 상태와 같은 행위를 가지게 된다. 만약에 다른 로직을 원한다면, 다른 클래스를 쓴다. 우리가 만드는 객체의 90프로는 이렇다. 가끔, 다른 클래스들은 당신이 문제에 대해 어떻게 생각하는가에 대한 효과적인 의사소통을 못 할 수도 있다.(?) 클래스가 많아짐으로써 당신은 짜증이 나고 위협을 받는다. 단 하나의 메소드를 오버라이딩하려고 서브클래싱을 많이 하는것은 낭비다. 또한 이렇게 많이 서브클래싱하면서 유연성이 떨어지게 된다.
         서로 다른 행동을 유발하는 것에 사용될 변수를 추가하라. 단 하나의 메소드만 오버라이딩된 수백,수천개의 클래스를 만들지 말고, Pluggable Behavior를 사용하자.
         해석 점점 이상해진다.--; 이 또한 C++에서는 함수 포인터로 구현할 수 있을 듯 하다.
  • Refactoring/BuildingTestCode . . . . 7 matches
         나로하여금 self-testing code로의 길을 시작하게 한 계기는 OOPSLA '92의 한 이야기부터였다. 그때 누군가 (아마도 Dave Thomas)"클래스는 자기 자신의 테스트코드를 가지고 있어야 한다" 라는 말을 했다. 이 말은 테스트를 구성하기 위한 좋은 방법으로 여겨졌다. 나는 모든 클래스클래스 스스로를 테스트하는 메소드들 (''test''라 한다.)들을 가지도록 만들었다.
         그때 나는 increment development단계에 있었고, 나는 매번 increment 을 완료할때 클래스들에 test method들을 추가했다. 그때 했던 프로젝트는 꽤 작았었고, 우리는 우리의 increment 주기는 한주 단위정도였다. 테스트의 실행은 는 꽤 수월하게 되었다. 하지만 테스트들은 실행하기 쉬웠지만, 테스트를 하는 것은 여전히 지겨운 일이였다. 이것은 내가 체크해야 하는 모든 테스트들이 console 에 결과를 출력하도록 만들어졌기 때문이다. 나는 꽤 게으른 사람이고, 나는 일을 피하기 위해 꽤 열심히 일을 준비했다. 나는 이 클래스들이 프린팅 해주는 것을 체크하는 대신, 컴퓨터가 테스트를 수행하도록 했다.내가 할일은 테스트 코드에 내가 기대하는 결과를 작성하고, 그 비교를 수행하는 것이다. 자, 나는 모든 클래스들의 test method를 수행할 수 있었고, 모든 일이 잘 되면 단지 'OK' 가 출력되는 것을 확인하면 되었다. 이 클래스는 지금 스스로 자기 자신을 테스트를 했다.
  • Ruby/2011년스터디 . . . . 7 matches
          * 루비의 클래스는 열려있어 메소드를 추가할 수 있다.
          * 코드블록 { ~~ } 을 객체처럼 넘길 수 있음. 혹은 yield함수가 호출한다.
          * Proc객체와 lambda함수의 차이점(정확한 차이점과 사용법)
          * 루비의 클래스 상속도와 klass가 나타내는 메타클래스의 정의.(루비의 메타클래스는 싱글턴객체다?)
          * 클래스는 타입이 아니다. 이것은 무엇을 이야기 하는 것일까?
  • WinampPluginProgramming/DSP . . . . 7 matches
         // 실제로 DSP 관련 처리시 호출되는 함수들.
          config, // config 시 호출 함수.
          init, // init 시 호출 함수
          modify_samples1, // DSP 처리시 호출 함수
          quit // quit 시 호출 함수
         // 실질적인 callback 함수.
         // this_mod 는 일종의 this pointer 라고 생각해도 좋을듯 하다. 해당 모듈(위의 mod1~5) 의 포인터이다.
  • i++VS++i . . . . 7 matches
          printf("%d", i); // 문제가 되는건 함수(i++)또는 함수(++i)이런데에서 문제가 생길거 같은데..
         == 함수 에서 사용 ==
          연산자 재정의를 하여 특정 개체에 대해 전위증가와 후위증가를 사용할 때에는 전위증가가 후위증가보다 효율이 좋다. operator++(int) 함수에서는 임시 객체를 생성하는 부분이 있다.
         그냥 사용한 경우나, for 문에서 사용한 경우는 ++i 와 i++ 의 성능 차이가 없다. 그러나 함수의 전달인자로 사용한 경우는 ++i 보다 i++ 의 코드가 명령어 한개 정도 길어진다. 하지만 그냥 사용한 경우나 for 문에서 사용한 경우에는 i++ 을 쓴 곳을 ++i 로 서로 바꿔 써도 상관 없으나, 함수의 전달인자로 사용한 경우에는 i++ 을 쓴 곳을 ++i 로 바꾸면 실행 결과가 달라진다. 그러므로 함수에서 i++ 을 사용하고 있을 경우 프로그램이 한 줄 이라도 추가되지 않고 ++i 로 바꿀수 있으면 바꾸는 것이 더 효율적이다. 또한 그냥 사용할 경우나, for 문에서 사용한 경우는 ++i 를 쓰지 않아도 상관 없다. --["상규"]
  • 데블스캠프2012/첫째날/후기 . . . . 7 matches
          * 배웠는데도 모르는 C : 순수 C문법은 C++이랑 헷갈리는 부분도 많고 구조체는 안써본지도 오래돼서 조금 불안했는데 그래도 치니까 별 문제 없이 돌아가는걸 보니까 아직까지는 많이 안까먹은거 같아서 다행이었습니다. 그리고 옛날에 함수 포인터를 처음 봤을 때는 이게 도대체 어떻게 돼먹은건가 싶었는데 지금 보니까 그렇게 어렵게 생긴게 아니라는 느낌이 들었습니다. 그래도 약간은 발전한 것 같아서 기뻤는데 오늘 이 부분을 처음 본 사람들은 어떤 느낌을 받았을지 궁금했습니다.
          * c프로그래밍 시간에 배웠던 함수포인터를 연습해볼 수 있는 좋은 기회였습니다.
          * 첫째 날 데블스 캠프는 정말 재미있었습니다. 우선 C 수업 중에 배우지 않은 문자열 함수와 구조체에 대해 배웠습니다. 또 수업 중에 배운 함수포인터를 실제로 사용해(qsort.... 잊지않겠다) 볼 수 있었습니다. 또 GUI를 위해 Microsoft Expression을 사용하게 됬는데, 이런 프로그램도 있었구나! 하는 생각이 들었습니다. GUI에서 QT Creator라는 것이 있다는 것도 오늘 처음 알게 되었습니다. 데블스 캠프를 통해 많은 것을 배울 수 있었습니다.
  • 만년달력/곽세환,조재화 . . . . 7 matches
         int monthDays(int x,int y); // 월의 일수를 계산하는 함수
         bool isYunYear(int x)//윤년을 계산하는 함수
         int monthDays(int x, int y)//월의 일수를 계산하는 함수
         함수를 하나더 사용. 코드이해를 증가시키기위해서...
         int monthDays(int x,int y); // 월의 일수를 계산하는 함수
         bool isYunYear(int x)//윤년을 계산하는 함수
         int monthDays(int x, int y)//월의 일수를 계산하는 함수
  • 반복문자열/허아영 . . . . 7 matches
         거기다 지역변수로 하면 각 함수에 넣어버리니 수정하기가 힘들지 않을까 하는 생각에 그냥 해버렸건만..;;)
         CAUCSE 문자열도 함수 입력으로 넣어 주면 좀 더 변화하기 쉬운 소스가 되지. 그리고 message나 messages 같은 함수 이름도 좀 더 명확하게 하는 게 좋을 거 같아. 나 같으면 밑에 처럼 풀 거야. 함수로 추출해 낼 때는 의미 단위로 추출하는 게 좋아. 그래야 함수 이름을 지을 때 편하지. 역으로 함수 이름을 짖기가 힘들다면 잘못된 설계가 되는거지. --재동
          C만 공부 계획했었는데, C++도 공부해야겠다는 생각이 문득 생기네요. 함수이름 신경써서 짓겠습니다 , !
  • 새싹교실/2012/벽돌쌓기 . . . . 7 matches
          : 함수의 기본선언 방법
          : 예제 - swap함수 / add 함수의 구현
          * 함수의 구현에 있어서 기본적인 int main(void) {}로 시작하여 간단한 swap함수와 add함수를 구현하여 설명하였고 return값이 정확하게 어떤 의미를 띄는지 함수선언의 자료형에 맞춰 강의하였다.
  • 새싹교실/2013/라이히스아우토반/3회차 . . . . 7 matches
          * 입력을 위한 함수를 써야 합니다. C언어의 콘솔을 위한 입력용 함수는 이런것들이 있습니다.
          int num1 = rand()%10000; //rand()는 임의의 수를 돌려주는 함수.
         오늘은 실수를 표시해주는 float 이란 함수
         rand() 함수 등 여러가지를 배웠습니다.
         음... 깨달은 점은 정말 함수같은것은 되게 많구나.. 라고 깨달았고
         또한 getchar() 과 scanf()등 여러 함수를 배우는 활동이었다.
  • 새싹교실/2013/록구록구/5회차 . . . . 7 matches
          * '''직접 함수 만들기!!'''
          * 함수가 무엇인가, 함수 만들기
         직접함수만드는 법을 배웠당:)
         printf하고 기뻐했는데 함수를 만들면서 의기소침해 졌지만
         열심히 공부해서 함수 만드는 것도 잘 할 수 있도록 해야겠다. 태히선생님 캐리해쥬세요ㅜㅜ
         이번에는 직접 함수를 만드는 방법을 배웠다.
  • 새싹스터디2007/영동 . . . . 7 matches
          * printf() 함수, scanf() 함수.
          * 함수
          * 재엽이가 전에 결석했으므로 함수 부분 복습
          * 포인터 기초적인 부분.(선언 및 사용/값에 의한 전달과 포인터에 의한 전달)
         ||이름||포인터를 이용한 두 수의 swap||
  • 시간맞추기/허아영 . . . . 7 matches
         -_- 모르는 함수를 찾아보는데 하루나 걸렸다.
         kbhit()이란 함수 인데, 키가 눌러지면 1, 안 눌러지면 0을 리턴을 한다는 것만을 알아냈다.
          그런데 time()함수를 사용한 방법에는 문제가 있는데 말이지..ㅎㅎ
          time()함수의 기능상의 문제점..ㅎㅎ 사실 이거말고 다른방법을 사용하는게 더 정확한데..ㅎㅎㅎ
          다른 함수가 있는걸로 알고 있지만.. 뭐~~
          내가 얼핏 보기에는 clock() 함수도 프로그램 시작하고 시간을 제는 것이라고 들었는데, 어떻게 쓰는걸까? - [허아영]
          음.. clock_t라는 time_t랑 비슷한 변수를 만들고 변수명=clock() 라고하면 프로그램이 시작된 뒤부터 지나간 시간이 기록되는군.. 그런데 함수의 특성상 정확한 시간을 나타내지는 않는다는 단점이..;;ㅁ;; - [조현태]
  • 임인택/삽질 . . . . 7 matches
          * STL list 는 자체적으로 sort 함수를 갖는다. ( 처음엔 VC 의 STL 이 표준이 아니라 그런줄 알고 [http://stlport.org STLPort] 를 설치하려 했었다.
          - ToDo : StaticObject 의 소멸시점 알아봐야지. 클래스일 경우와 구조체일 경우. Java, C++
         이중 포인터의 전달
         void someFunc(Tree **t1, Tree **t2); // 요런 함수가 있었을 때.
         // 진짜 오랜만에 포인터로 삽질함.
         JavaServerPage에서 bean 클래스를 사용할때 클래스 생성자에는 전달인자를 사용할 수 없다.
  • 조현태/놀이/지뢰파인더 . . . . 7 matches
          데블스 캠프에서 배운 로보코드를 활용할 생각..^^ 뭔가 객체같은 느낌이 들어서 클래스로 만들어 주기로 했다.^^
          그런데 클래스란거 배우지도 않고 막 써도 되는건가..ㅠ.ㅜ 나쁜습관이 들지도..^^;;
          클래스명이 로보 만들어놓은 객체의 이름을 레인져로 지어주었다.^^;;;
          갈수록 일에 치여 시간이 줄어든다.^^ 오늘은 클래스를 2개나 동원해서 레인져가 자료를 저장할 곳을 조금 만들었다.
          한 클래스에서 다른 클래스를 붕어빵 찍듯이 찍어내고, 또 그 클래스가 여러개로 찍혀나가게 했는데..
  • 진법바꾸기/김영록 . . . . 7 matches
         함수를 만들어 쓰는데 익숙하지 않아 최대한 함수를 많이 이용하는쪽으로 하려다보니
         get_maxjarisu 최대 자리수 얻기 함수
         get_count 자리수의 값 얻기 함수
         get_jegob 제곱함수
         기능 : 단순이 제곱을 해주는 함수이다.
         behavior 행동함수
  • 파스칼삼각형/허아영 . . . . 7 matches
         처음에 포인터 에러가 나서, 혼났다 ㅠ
         ver.3 파스칼삼각형 코딩한다니까. 보창오빠가 흘려가는 말로 "재귀함수로 짜면 되지 않냐" 고 했던 말이 생각나서
         짜봤다. 메모리 낭비없이 깔끔하긴 한데, 제대로 짠건지 모르겠다. 재귀함수는 어쩔 땐 헷갈린다.
          지금 나의 머리는 터질 듯 아프단다. ^^; 포인터 때문에 데여갖고-.ㅠ 소스를 아예 바꾸는 큰 공사를 치뤘기 때문에 ㅠ
          2차 이상의 배열을 포인터로 넘기는건 고생인데 말야.^^
          고생했겠네..^^ 포인터..ㅎㅎㅎ 그래도 즐거운 하루. 즐거운 코딩 되라구.. 진짜 일하러 가야겠다 뱌뱌~~ - [조현태]
         엇~ 아영이 누나도 처음엔 원시적으로 짜셨네요~^^;; 후후.. 재귀함수로 이렇게 짤수있는거군요 센스 =ㅅ=b - [김준석]
  • 02_Python . . . . 6 matches
          * Class 개념 까지는 들어가지 않을 예정 .. 아직까지는 함수 개념 잡기가 바쁠꺼라는 생각이 듬
          * 자료형, 연산자 , 기본문법 , 함수 , 모듈을 중점적으로 다룰 예정임
         호출 함수 실행 stdout.write("spam, ham.toast\n")
         Def, Return 함수 만들기 def f(a,b,c=1, *d): return a+b+c+d[0]
         == 함수 와 모듈 ==
         === 함수와 관련된 문 ===
  • 5인용C++스터디/윈도우에그림그리기 . . . . 6 matches
         GDI(Graphics Device Interface)란 윈도우의 클라이언트 영역에 그리기를 하는데 사용되는 함수이다. 비디오 출력과 프린터에 그래픽 출력을 책임지고 있는 부분이다. 사용자가 Windows용으로 작성하는 응용 프로그램이 GDI를 사용하여 시각적인 정보를 출력할 뿐 아니라 Windows 자체도 GDI를 사용하여 메뉴, 스크롤 바, 아이콘, 그리고 마우스 커서 같은 사용자 인터페이스 아이템의 시각적인 출력을 수행한다.
         DC(Device Context)는 GDI에 의해 내부적으로 관리되는 데이터 구조체이며 '''그래픽 작업을 하기 위해서 필요한 것'''이다. 그림을 그리고자 할 때에는 반드시 먼저 DC에 대한 핸들을 얻어야 한다. 프로그램에 이 핸들을 주는 것으로 Windows는 사용자가 그 장치를 사용할 수 있도록 허가해 준다. 그러면 핸들을 GDI 함수의 인자로 사용하여 현재 그리고자 하는 장치를 Windows가 식별할 수 있도록 한다.
         두 경우에 있어서 첫번째 인자는 프로그램의 윈도우에 대한 핸들이다. 두번째 인자는 PAINTSTRUCT 형식의 구조체에 대한 포인터이다. PAINTSTRUCT 구조체에는 윈도우 프로시저가 클라이언트 영역을 그리는 데 사용할 수 있는 정보들이 저장되어 있다.
         첫번째 인자는 프로그램 윈도우에 대한 핸들이다. 두번째 인자는 RECT형식의 사각형 구조체에 대한 포인터이다.
          * CreatePen() : 펜을 생성하는 함수.
          * DeleteObject() : CreatePen()함수로 생성한 펜을 지우는 역할.
  • AcceleratedC++/Chapter5 . . . . 6 matches
          * 여태까지 vector랑 string 갖고 잘 놀았다. 이제 이것들을 넘어서는 것을 살펴볼 것이다. 그러면서 라이브러리 사용법에 대해 더 깊게 이해하게 될것이다. 라이브러리는 자료구조?함수만을 제공해주는 것이 아니다. 튼튼한 아키텍쳐도 반영해준다. 마치 vector의 사용법을 알게 되면, 다른것도 쉽게 배울수 있는것처럼...
          * 왜 students.erase(students[i]) 하지 않는가? 모든 컨테이너에 일관성을 제공하기 위해서라고 한다. 바로 반복자라 불리우는 것을 이용해, (포인터보다 반복자가 먼저 나오네요.) 동일한 방법으로 제어를 할수 있는 것이다.
          * (*i).name : 반복자 i가 가리키는 요소의 멤버 name을 말한다. 괄호를 꼭 써주자. 우선순위가 .이 *보다 높기 때문에 에러난다.
          * 인덱스 쓰던 함수를 반복자로만 바꿔 보자.
          * 벡터는 삽입, 삭제 할때마다 메모리를 몽땅 재할당한다. 따라서 ~~.end()는 버그의 온상이 왼다. 계속 바뀌므로... 하지만 list는 삽입, 삭제한다고 몽땅 재할당하지 않는다. 그래서 빠른 것이다. 또한 임의 접근을 지원하는 컨테이너만 쓸수 있는 표준 알고리즘 sort도 당연히 쓸수 없다. 그래서 list의 멤버함수로 sort가 있다. 다음과 같이 써주자.
  • AppletVSApplication/상욱 . . . . 6 matches
          자바 애플릿은 기본적으로 java.applet.Applet 클래스를 상속하는 하위클래스를 생성함으로써 작성가능한데, java.applet.Applet 클래스
         java.awt.Panel 클래스를 상속하는 하위클래스입니다.
          따라서, 자바 클래스는 하나의 패널 컴포넌트가 가지는 모든 기능을 그대로 사용가능하다는 것입니다. 물론, 자바 애플리케이션은 자바 가상머신
  • CPPStudy_2005_1 . . . . 6 matches
         || 7/18 || 남상협, 박영창, 김태훈 || 각자 Chapter2까지 공부 해오기 || 간단한 클래스 설명 & STL Vector || - ||
         || 8/15 || - || Chapter10 || chpaper 10장 스터디 || STL과제->클래스화 and [CppStudy_2005_1/BasicBusSimulation] ||
         || 8/22 || 남상협, 김태훈, 석지희 || 클래스 상속, 가상 함수 등등 실습 || - ||
          * 이번 과제는 잠시 생각중..... 클래스화 하는것만 낼지 추가로 더 낼지 메신저로 여론 수렴후 결절하겠음.
         || 이름 || 소스 || 소스2(클래스화) ||
  • GRASP . . . . 6 matches
          문제 도메인 개념을 표현하지 않는 인위적인, 편의상 만든 클래스에 매우 응집된 책임들을 할당한다.
          Pure Fabrication 클래스를 식별하는 것은 중대한 일이 아니다. 이는 어떤 소프트웨어 클래스는 도메인을 표현하기 위한 것이고 어떤 소프트웨어 클래스는 단순히 객체 설계자가 편의를 위해 만든 것이라는 일반적인 점을 알리기 위한 교육적인 개념이다. 편의를 위한 클래스들은 대개 어떤 공통의 행위들을 함께 그룹짓기 위해 설계되며, 이는 표현적 분해보다는 행위적 분해에 의해 생성된다.
          * 행위적 분해(Behavioral Decomposition) : 행위를 그룹화하거나 알고리즘에 따라 책임을 할당, 몇몇 관련된 행위나 방법들을 그룹화하도록 개발자가 편의상 만들어 낸 클래스, 행위적 분해에 의한 것
  • LUA_5 . . . . 6 matches
         2. 테이블과 함수
         지금까지는 간단히 테이블을 자료구조로 사용하였는데, 루아에서는 거의 모든 것이 테이블의 키로 사용 될 수 있기 때문에 테이블과 함수를 연결 할 수 있습니다.
         >> return { Go = Go } -- 여기서 local function Go를 반환하므로 Car에 대한 맴버 함수로 사용할 수 있다.
         > myCar = Car("SM3") -- Car 라는 함수를 통해 테이블을 만들고 테이블 내의 함수를 통해 객체 지향 코드 작성
         이렇게 만들면 좀 더 객체 지향적으로 만들 수 있습니다. 여기서 setmetatable이라는 함수가 나옵니다. metatable에 대해서는 다음 강의에서 설명하도록 하겠습니다.
  • OpenGL스터디 . . . . 6 matches
          * openGL에는 창관리, 상호 작용 인터페이스에 대한 어떤 함수도 없다. 이는 '''일반적인 임플리먼테이션(지정된 규약을 구현한 구현체)'''에 적용하기 위해서이다. Mac이나 리눅스 윈도우 각각 환경에 대해서 모두 접근이 가능케 하기위함이라고 간단히 말할 수 있다.
          * openGL을 상징하는 GL을 앞에 붙히는건 이뿐만아니라 함수에도 적용된다는 사실을 하나 알아두자.
         === 함수 이름 규칙 ===
          * 위와 같은 방식으로 함수 이름이 정해져있는데 예를 들어보자면 다음과 같다.
          * glColor3f(GLfloat a, GLfloat b, GLfloat c); ---->이와 같은 함수를 분석해보면, gl이라는 라이브러리에 Color라는 명령을 담당하는 float인자가 3개있는 함수이다.라고 해석할 수 있다.
  • StaticInitializer . . . . 6 matches
         문제는 StaticInitializer 부분에 대해서 상속 클래스에서 치환을 시킬 수 없다는 점이다. 이는 꽤 심각한 문제를 발생하는데, 특히 Test 를 작성하는중 MockObject 등의 방법을 사용할 때 StaticInitializer 로 된 코드를 치환시킬 수 없기 때문이다. 저 안에 의존성을 가지는 다른 객체를 생성한다고 한다면 그 객체를 Mock 으로 치환하는 등의 일을 하곤 하는데 StaticInitialzer 는 아에 해당 클래스가 인스턴스화 될때 바로 실행이 되어버리기 때문에 치환할 수 없다.
         StaticInitialzer 에서 값만 치환하는 것으로 (상속클래스에서 해당 Class Variable 의 값을 바꿔주는식으로) 해결되는 문제라면 크게 어렵진 않다. 하지만, 만일 저 부분에 DB 나 File 등(또는 File 을 사용하는 Logger 등) 외부 자원을 이용하는 클래스를 초기화하게 된다면 사태는 더욱더 심각해진다. 처음부터 해당 Class 가 DB, File 등 큰 자원에 대해 의존성을 가지게 되는 것이다. 게다가 이는 상속을 하여 해당 부분을 Mock 으로 치환하려고 해도 StaticInitializer 가 먼저 실행되어버리므로 '치환'이 불가능해져버린다.
         이를 방지하려면, StaticInitializer 를 일반 Method 로 추출한뒤, 생성자에서 이를 호출한다. (단, 인스턴스를 2개 이상 만드는 클래스인경우 문제가 있겠다.)
         실무에서 저러한 StaticInitializer 를 가장 많이 볼 수 있는 곳은 Logging 관련 코드이다. 보통 Logging 관련 코드들은 개발 마무리 즈음에 붙이게 되는데, 일정에 쫓기다 보니 사람들이 Logging 관련 코드에 대해서는 CopyAndPaste 의 유혹에 빠지게 된다. 순식간에 Logging 과 Property(해당 클래스에 대한 환경설정부분) 에 대한 Dependency 가 발생하게 된다. 팀 차원에서 조심할 필요가 있다. --[1002]
  • [Lovely]boy^_^/Arcanoid . . . . 6 matches
          * 소스에 이것저것 막 넣다 보니 지금 코드가 상당히 지저분해졌다. 중복을 최대한 없애는 방향으로 해놔서 중복은 별루 없지만, 한 메소드가 너무 길고, 클래스 별 역할 분담이 제대로 이뤄지지 않은것 같다. 모든 충돌루틴이 다 CArcaBall에 집중되어 있다.
          * 컨테이너에 포인터 안 넣을라고 복사 생성자, 대입 연산자 이런것도 만들어야 했다..--;
          * 전체적인 디자인 변화 : 먼저번게 분산식이었다면, 이번건 커다란 관리 클래스에서 알아서 하는 식으로 바꼈다. OOP로부터 점점 멀어지는거 같긴 하지만..--;
         CArcaObject - 알카노이드에 등장하는 모든 오브젝트들의 부모 클래스(위치, 크기, 비트맵, getter/setter)
          * MFC 책에 보면 비트맵 또는 GDI 쓸때 CPen pen, *pOldPen 이렇게 해서 뭔가 이상한 짓을 하는데 갠적으로는 왜 그렇게 하는지 이해를 못하겠다. 그냥 멤버에 넣어버리면 pOldPen 이런거 안해도 되던데.. 아시는분은 갈쳐 주세요.^^;
          * 고로 요지는.. 아--; 왜 이렇게 전달이 안돼지. 저렇게 포인터 만들었다가 그리다가 다시 선택하다가 하는 이유를 잘 모르겠다는..^^;
  • 데블스캠프2005/게임만들기/제작과정예제 . . . . 6 matches
          우선 랜덤하게 블럭을 생성하기 위해서 start()함수에 srand((int)time(NULL));라고 적어서, 시간을 이용해서 랜덤하게 나오게 한 다음,
          블럭을 랜덤하게 호출하는 함수를 만들자. 그리고 그 안에 rand()함수를 사용해서, 임의의 숫자를 얻은후 그 숫자에 맞추어 블럭을 지정하고
          테스트를 위해서는 key_Left()와 같은 변수안에 넣고, 랜덤으로 만드는 함수를 호출한후, 호출해 보면 된다.
          다 만들어 진 후, 왼쪽, 오른쪽 방향키에 알맞은 인자를 넣어서 함수를 넣고, now_time()에 블럭을 아래로 내리는 함수를 호출하도록 하자.
  • 데블스캠프2012/넷째날/후기 . . . . 6 matches
          * [서민관] - 개인적으로 알고리즘 강의는 들을 때마다 참 신박합니다. 그래도 진경이가 알고리즘을 다루는 만큼 내용이 꽤 괜찮지 않았나 싶습니다. 특히 어떤 인자들은 함수의 인자로 넣고 어떤 인자는 전역으로 선언해도 되는가 같은 점은 확실히 들으면서도 그렇구나 싶은 내용이었습니다. 변하는 부분이 함수의 인자로 들어가는군요. 후반에는 약간 설명이 아쉬운 느낌이 들었지만 그래도 개인적으로는 역시 마음에 드는 강의였습니다.
          * 실제로 강사 당사자가 '''5일간''' 배운 C#은 실무(현업) 위주라 객체지향 관점이라던가 이런건 많이 못 배웠습니다. 함수 포인터와 비슷한 Delegate라던가 Multi Thread를 백그라운드로 돌린다던가 이런건 웬지 어린 친구들이 멘붕할듯 하고 저도 확신이 없어 다 빼버렸지요 ㅋㅋㅋㅋㅋㅋ namespace와 partial class, 참조 추가 dll 갖고 놀기(역어셈을 포함하여) 같은걸 재밌게도 해보고 싶었지만 예제 준비할 시간이 부족했어요ㅠ_- 개인적으로 마지막 자유주제 프로그램은 민관 군 작품이 제일 좋았어요 ㅋㅋ - [지원]
          * [서민관] - 이번 데블스캠프에 fundamental한 내용이 적다고 형진 선배가 얘기를 하셨는데 이번 시간이 그런 fundamental한 부분에 대한 요구를 좀 충족시켜준 시간이 아닌가 싶습니다. 다만 개인적으로 아쉬운 점은 1학년들이 C 언어 사용에 그렇게까지 익숙하지 않은지 파일 입출력 함수들의 사용이 그렇게 익숙하지 않았다는 점이었습니다. 분명 익혀두면 2학기에 도움이 될 기술이라고 생각하는 만큼 좀 아쉽긴 하네요. 그래도 아마 2학기 되면 인터넷에서 찾아가면서 하겠지만.
          *[안혁준] - 파일 입출력은 사실 이렇게 하는 경우는 이제는 거희 없지만, 알아두는게 좋은 내용이었습니다. 나중에 다른 언어들의 파일 입출력을 이해하는데 큰도움이 되거든요. 리틀 엔디안과 빅 엔디안의 차이라던가 사용문법의 차이같은것이 있지만 사실 모두 C의 출력을 예쁘게 만들어논거에 지나지 않으니까요. 새내기 분들은 함수를 다외우지는 못하더라도 "아! 파일 입출력은 어떤어떤 방식이 있구나"정도는 숙지하는게 좋을 껍니다. 어찌보면 어려운 내용을 잘 이끌어갔다고 봅니다.
  • 레밍즈프로젝트/일정 . . . . 6 matches
         || 11/12 || 일정예측, 스펙분석, 역할 분담, 툴 학습, 클래스, 시퀸스 다이어그램 || 준비물 : 스카치테이프, 다용도카드, 카메라, 보드마커 ||
         || 11/18-19 || 중간보고 모임 || 서로 진행 상황 보고. 게임 클래스 내부 진행. ||
         || 11/14 || 프로토타입, 클래스, 시퀸스 다이어그램, 일정 To FTP ||
         || 11/19 || 에니메이션 버튼(유죠), 윈도우 프레임(유죠), 타이머클래스(박진하+이승한) ||
         || 11/25 || 게임 클래스 마무리, 맵 에디터 그리기 구현 ||
         || 11/26 || 중간회의, 클래스 리팩토링 ||
  • 반복문자열/김대순 . . . . 6 matches
         웬지 함수를 굳이 쓰지 말아야 하는 코딩 같은..ㅡㅡ; 헬미~~!!
         변수명, 함수명을 정할 때는 항상 어떤 의미를 나타내는 변수이고, 어떤 일을 수행하는 함수인지를 명확히 나타내는 이름을 쓰세요.
         위와 같이 함수명을 y()로 해버리면 다른 사람이 함수원형만 보고는 뭘 하는 지 잘 모르겠죠? - 도현
         '''++'''을 쓰는 경우 조심할 필요가 있습니다. 지금은 함수에 값에 의해 전달을 하기 때문에 아무 문제가 없어 보입니다. 하지만 다음과 같은 경우는 어떨까요? -- [Leonardong]
  • 삼총사CppStudy/Inheritance . . . . 6 matches
         class CMarine // 마린을 정의한 클래스
         class CFirebat // 파이어뱃을 정의한 클래스
          다음날 문제점이 발견되었다. 마린과 파이어뱃으로 부대를 구성하여 배열에 저장하려고 하였는데 두개의 클래스가 틀리기 때문에 한개의 배열로는 포함할 수가 없었다.
         protected: // protected를 사용한 이유는 상속받은 클래스에서도 이 멤버들을 사용할 수 있게 하기 위함이다.
          마린과 파이어뱃은 이 유니트라는 클래스를 상속 받으면 된다.
  • 새싹교실/2011/Pixar/4월 . . . . 6 matches
          * 누나 솔찍히 어제 시험끝났다고 늦게자고와서 오늘 너무 피곤한상태에서 했어서 집중도못하고 죄송해요 ㅠㅠ. 레몬에이드 제가젤좋아하는건데 누나 짱맛있었어요. 오늘 함수를 배웠는데 시험전에 혼자 공부해놨던게있었는데 그거때매 우쭐해서 솔직히 오늘 좀 건방졌던거같아요 죄송해요 ㅠ-ㅠ . 전역변수 지역변수 그게 솔직히 아직도 엄청 잘은 이해가 안되요 누나. 더많이배우고싶어요 누나 ㅋㅋㅋ . 누나 저 마에스트로 그거 어떻게쓸지 감이안와요..ㅠ.ㅠ.ㅠ.ㅠ.ㅠ
         오늘은 함수를 배웟고 재귀를 쓰는법을 배웟는데 재귀는 쫌 많이 어려웠어요
         오늘은 변수종류에대해서 배웠다 local,global,static등에 대해배웠고, 반복문을 사용하여달력도 만들어보았고, 함수에 대해서도 배웠다.
         오늘은 함수와 재귀와 변수 종류를 배웠다.
         함수는 시험치느라 미리 공부해서 왠만한 부분은 다 알았지만 정확하게 함수의 개념에 대해서 알게 되었다
  • 새싹교실/2011/무전취식/레벨6 . . . . 6 matches
          * Factorial 짤때 중요한건 Stack Call!! 함수 호출시. 스택에 돌아올 주소를 넣어두고 함수가 종료되면 스택에서 빼와서 돌아간다. 너무 많은 자기 자신을 호출하는 함수라면 스택에 너무 많이 쌓여 오버 플로우(Over Flow)로 에러가 나게 된다. 항상!! 종료조건을 정하고 함수를 설계하자.
          * 후기 늦게써서 죄송해요...ㅠ_ㅠ 스택은 어렵습니다. 별로 신경써야하는 부분이 아니라고 생각하고있었는데 그래서 재귀함수를 못했나봐요. 배열도 완전히 까먹고있던걸 새로배우는 마음으로 배웠어요. 배열~포인터까지는 다시한번 복습이 필요할것같아요! -[이소라]
  • 새싹교실/2011/쉬운것같지만쉬운반/2011.5.3 . . . . 6 matches
          - 다섯번째( 치완이랑 용운이 참석: 함수 설명 )
          - 여섯번째( 형준이 참석: 처음부터 함수까지 설명 )
          5. assert 함수를 사용하는 이유는 무엇인가?
          7. printf함수는 어떤 원리로 작동할까?
          5. assert 함수를 사용하는 이유는 무엇인가?
          7. printf함수는 어떤 원리로 작동할까?
  • 새싹교실/2011/씨언어발전/6회차 . . . . 6 matches
         저번에 함수, 배열에 이어 포인터에 대해 배웠습니다.
          * 포인터를 이용한 동적할당
          * 포인터에 대해 개념을 정리하였다. malloc 을 이용하여 동적할당을 하는 방법을 배웠다. 이거 배우기 전엔 그냥 배열에서 a[99999] 이랬는데 ㅋㅋㅋ
         오늘 드디어 포인터에 대하여 배웠다.
         포인터란 메모리의 주소를 말한다.
  • 새싹교실/2012/강력반 . . . . 6 matches
         4.입출력 함수
         printf - 콘솔창에 출력을 위한 함수
         scanf - 콘솔창에서 입력을 받기 위한 함수
          * 설유환 - printf함수, scanf함수, if문, else if문, switch 제어문을 배웠다. 특히 double, int, float의 차이를 확실히 배울 수 있었다. 잘이해안갔던 #include<stdio.h>의 의미, return 0;의 의미도 알수 있었다. 다음시간엔 간단한 알고리즘을 이용한 게임을 만들것같다. 그리고 printf("숫자%lf",input);처럼 숫자를 이용해 소숫점 표현량을 제한하여 더 이쁘게 출력하는법도 배웠다.
          * 황현제 - 우선 c언어에서 쓰이는 기본적인 연산자가 무엇이 있는지에 대해서 배웠다. 또한 함수 4가지에 대해서 배웠는데, printf, scanf,switch, if에 대해서 배웠고 그리고 새싹강사님께 C를 이용해 작성하신 프로그램을 구경하기도 했는데, C로 이런것도 할 수 있다는 것을 알았다. 새싹 강사님께서 우선적으로 설명을 해주신다음 새싹들이 실습하는 방식으로 수업이 진행됬는데, 옆에서 강사님이 지속적인 피드백을 해주셔서 이해하기가 편했다. 다음에는 반복문에 대해서 배우고, 실습도 해봐야겠다.
  • 새싹교실/2012/새싹교실강사교육/3주차 . . . . 6 matches
         - 배열, 포인터, 어드레스, 함수, Call-by-value, Call-by-reference, 구조체 -
         3.1 함수(function)는 뭐고. 왜 생겼는가? 쓰면 좋은 점은? 함수의 범위(Scope)란?
         3.3 메모리 주소(address)와 변수의 메모리 할당. 그리고 *포인터 (pointer)
         3.5 자기자신을 부르는 재귀 함수?
  • 새싹교실/2012/아우토반/앞반/3.29 . . . . 6 matches
          * 포인터
          * 포인터 변수의 선언과 초기화
          * 개념 설명 위주로 수업을 진행하였다. 아무래도 포인터를 배우기에 앞서 필요한 메모리 동작에 대한 지식을 이해시키려면 좀 더 시간이 걸릴 것 같다. 실습하는 시간도 필요할 것 같다. 수많은 런타임 에러를 겪고 나서야 포인터를 느낄 수 있으니까... 긴장타시오 다음 시간엔 멘탈붕괴가 일어날 테니깐! - [장용운]
          * 개념 설명 위주로 수업을 들었다. 그런데 집중을하는데 잘 안들어왔다 왜그렇지 왜그런거지 왜그랬을까. 난 아직 갈길이 멀다는 걸 느꼈다. 포인터 쪽은 한번에 전부 이해하기 힘드니 실습을 병행해 자주 봐야겠다.. 멘탈을 강화시키는 연습을 해야겠다
         (1) sizeof 연산자를 이용하여 int, char, float, double 변수와 그 변수를 가리키는 포인터 변수가 메모리를 차지하는 용량을 구하시오(소스 코드 및 결과)
  • 새싹교실/2012/열반/120402 . . . . 6 matches
         == 재귀 함수 ==
          * 별을 n개 출력하는 함수입니다.
          * 위의 printstar(int) 함수가 정의되었다고 가정
          * main은 함수이므로 정의할 때 괄호가 필요합니다. main -> main()
          * while, do while 반복문과 재귀함수를 이용한 점찍기를 배웠습니다. -[권우성]
          * 별찍기, do while, while을 배웠습니다. 제가 짠 함수가 맞아서 기뻤습니다^o^ -[채유빈]
  • 새싹교실/2012/열반/120514 . . . . 6 matches
         == 재귀함수 복습 ==
          * 재귀 함수를 응용하려면 많은 연습이 필요합니다.
         == 포인터와 주소 ==
         === 포인터 ===
          // 포인터 변수를 선언할 때에는 '*'를 변수 이름 앞에 붙입니다.
          // 포인터 변수 앞에 '*'를 써서 저장된 주소에 접근할 수 있습니다.
  • 새싹교실/2012/주먹밥/이소라때리기게임 . . . . 6 matches
          void (*func)(PLAYER *, PLAYER *); //신나는 함수포인터
         //select에 정의된대로 정의된 함수들.
         ////////////////게임 프로세스 함수들.
         //select에 정의된대로 정의된 함수들.
         ////////////////게임 프로세스 함수들.
  • 새싹교실/2013/케로로반 . . . . 6 matches
          * C언어의 유래와 C언어를 배워하는 이유, Hello World를 출력하는 소스를 짜고, 이것에 대한 설명과 함께 함수를 곁들이기... 하다가 return 설명하는데 30분을 버리고 ~_~
          * 함수에 대해서 가르쳐주었습니다.
          * 함수에 대해서 다시 정리하고, 직접 만들어 보는 시간
          * 지역변수가 다른 함수에서 접근이 불가능한 이유와 call-by-value
          * 수학함수
          * 포인터의 기초
  • 새싹배움터05 . . . . 6 matches
         || 2_4/11 || C ([이승한]) || 기본문법과, 포인터 || 중간고사 대비라는 느낌이 진하게 될듯 ||
         || 3_4/25 || [C언어포인터특강] ([상규]) || 포인터 || 포인터를 알려주마! ||
          C, 발표잘하는법, PPT제작 기법, [Python], [PHP], [ExtremeProgramming], ToyProblems, Linux, Internetworking(TCP/IP), Ghost(demonstration), OS(abstraction), OS+Windows, Embedded System, 다양한 언어들(Scheme, Haskell, Ruby, ...), 보안(본안의 기본과 기초, 인터넷 뱅킹의 인증서에 대해..), C언어 포인터 특강(?), 정보검색(검색 엔진의 원리와 구현), 컴퓨터 구조(컴퓨터는 도대체 어떻게 일을 하는가), 자바 가상머신 소스 분석
          저는 포인터에 대해서 하기로 정해졌습니다. 그 다음으로 리눅스를 인택이형이 해주시면 되겠네요^^ --[상규]
  • 여사모 . . . . 6 matches
         - 아마도 문자열이 초기화가 안돼서인것 같다. strlen()함수는 char *(캐릭터형 포인터)을 전달인자로 받지.
         이 포인터가 가리키는 주소부터 시작해서 주소가 NULL인 주소가 나올 때까지 카운트를 해서 그 값을 리턴하는
         게 strlen()함수야. 문자열을 초기화할 때에는 예를 들어 char * arr = "ABCDE"; 라고 하면 arr[5]에는 자동
         했을때 23이 나오는 것은 포인터 a가 가리키고 있는 주소+23에 NULL문자가 들어 있다는 뜻이지.
         - 아, 그리고 new연산자는 char[b]가 저장될 만큼의 메모리를 확보해서 그 주소를 포인터a에 넘겨주는 거지
  • 이연주/공부방 . . . . 6 matches
         ==== 포인터 처리에 대한 연습 ====
          포인터로 배열들의 요소를 지적하고 배열간의 자료교환을 하는 프로그램을 작성하시오.
          변수형과 포인터와의 관계, 포인터가 가리키는 대상의 크기 등을 보여주는 기능을 첨가하여 작성하시오.
          * 변수형과 포인터와의 관계
          * 포인터가 가리키는 대상의 크기를 출력함
  • 이영호/미니프로젝트#1 . . . . 6 matches
         // 클래스의 상속성으로 인해 기존의 클래스를 고치지 않아서 인것 같다.
         file.c -> 파일 입출력을 다루는 함수와 메세지들을 Log하는 부분을 담당한다. 일단 프로그램을 어느 정도 만들고 구현하도록한다.
         bot.c -> 봇에 관한 함수.
         attack_#.c(# == 임의의 숫자) -> 공격 함수. 요즘 보안홀들을 체크하여 보안홀들을 공격하는 함수들을 집어넣자.
  • 정모/2006.5.22 . . . . 6 matches
          - 주제 : 표준 입출력, 제어문, 포인터, 함수, 구조체, 클래스, 파일, 타이머, 랜덤, 소켓,
          - 월 : 표준입출력, 문법, 함수, MSDN, 비트연산, 아스키 / 수생, 유선, 용안
          - 화 : 구조체, 파일 입출력, 포인터(메모리), 디버깅 / 아영, 상규, 선호, 도현
          - 목 : 클래스, 객체지향, API / 선호, 인수, 준수, 용재, 창섭
  • 코바예제/시계 . . . . 6 matches
         시간 객체에 대한 인터페이스는 ObjTimeServer이며 getTime()이라는 메소드를 가지고 있는데 getTime()는 문자 형식으로 현재의 시간을 반환해 준다. CORBA 객체를 작성하는 첫번째 단계는 인터페이스를 만드는 것이다. 인터페이스는 IDL로 작성되며 인터페이스는 IDL 컴파일러로 컴파일된다. 이 IDL 컴파일러는 기본적으로 사용자가 이용하는(예를들면 VisiBroker) ORB에 포함되어 있는 것이다. IDL로 작성된 인터페이스를 컴파일하면 컴파일러는 두 개의 코드 파일을 생성해 준다. 이 코드 파일들은 각 IDL 컴파일러가 사용하도록 약정된 프로그래밍 언어로 되어 있다. 여기에서 사용하는 ORB는 Java ORB이므로 코드 파일은 Java(Stub, Skeleton)로 되어 있을 것이다. IDL 컴파일러에 의해 생성되는 코드는 프록시 객체(proxy object) 및 스켈레톤 코드이다. 클라이언트는 프록시 객체를 사용하여 IDL로 표현된 인터페이스 타입의 객체 레퍼런스에 대한 호출을 생성한다. 바꾸어 말하녀 프록시 객체는 클라이언트가 작업을 위해 사용하는 대리("stand-in") 객체인데 원격 객체가 마치 지역 객체처럼 보이게 해준다는 것이다. 스켈레톤 코드는 이러한 인터페이스를 지원하는 객체에 액세스하기 위해 사용된다. 생성되는 코드는 위치 투명성을 구현한다. 위치 투명성을 통해 객체 레퍼런스를 변환하여 네트웍 연결을 퉁해 원격 서버로 보내며, 객체 레퍼런스에 대한 오퍼레이션에 따르붙는 파라미터를 ["마샬링"]하고, 이를 객체 레퍼런스가 지시하는 객체의 현재 메소드에 전달하여 메소드를 수행하고 그 결과를 반환하려고 하는 것이다. 바꾸어 말하면 클라이언트는 IDL 컴파일러에 의해 생성된 프록시 객체를 가지고 작업을 하는데, 그것이 마치 지역 객체로 작업하는 것처럼 보일 것이라는 의미이다. ORB와 통신하는 것이 프록시 객체의 임무이며 ORB는 네트웍 연결을 관리하고 파라미터를 실제 서버 함수에 넘겨주며 결과를 리턴한다. 이런 식으로 수행에 대한 투명성을 유지한다.
         위의 IDL을 컴파일하면 스텁과 스켈레톤 코드가 생성된다. 컴파일러가 ObjTimeServer_Skeleton.java라는 이름의 파일을 생성하였으며, 여기에는 서버 쪽에서 사용되는 스켈레톤 코드가 들어 있다고 가정하자. 이제 이 IDL에서 지정된 인터페이스를 갖는 객체를 구현해야만 한다. 이 말은 서버 코드, 즉 구현을 작성해야 한다는 것이다. 그러한 구현 객체 클래스를 작성하기 위해서는 IDL 컴파일러에 의해 만들어진 스켈레톤 클래스와 결합해야 한다. 이 결합은 상속 또는 위임을 사용해서 이루어질 수 이다.
         //구현 클래스에 대한 가상 코드
         이 클래스는 환경을 초기화하고, 구현 객체를 생성하며, 클라이언트가 구현 객체를 사용할 수 있도록하고, 이벤트를 받아들이는 일을 한다.
         // 구현 클래스 생성
  • 한자공/시즌1 . . . . 6 matches
         == 멤버 ==
          * 클래스의 기본 개념을 공부해 오고, 직접 클래스를 이용해서 코드를 작성해 보았습니다.
          * Human 클래스를 짜고, 생성자를 이용해서 초기화를 시키는 방법을 이용해서 수정을 해 봄.
          * 처음으로 한자공의 모든 멤버가 모인 날입니다.
          * 코드 리뷰는 코드를 설명 하고, 그 후 다른 멤버의 질문과 피드백을 받는 형식으로 진행 했습니다.
  • 05학번만의C++Study/숙제제출4/최경현 . . . . 5 matches
          cout << "클래스가 생성 되었습니다." << endl ;
          cout << m_number << "를 가진 클래스가 파괴 되었습니다." << endl ;
          - 확실히.ㅎㅎ 버그가 있네. 이 버그는 클래스를 삭제한 뒤에 그 공간이 비게되는데, 거기에서 값을 체크하는 함수를 실행시키려고 시도했기 때문에 발생하는 문제야.
          해결 방법은 그 공간뒤의 클래스들을 한칸씩 앞으로 당기고, i의 값을 1줄여주면 되겠지.ㅎㅎ
  • 2학기자바스터디/운세게임 . . . . 5 matches
         운세게임이라서 거창한 알고리즘을 필요로 하는게 아니라 랜덤함수를 이용해 오늘의 행운을 표시합니다
         날짜와 랜덤 클래스에 대한 간단한 사용법에 대해 알아봅시다
         Date와 Calendar 클래스를 이용하는 방법이 있습니다
          다양한 형식으로 출력하려면 SimpleDateFormat 클래스를 같이 이용합니다.
          Calendar클래스 상수
  • 2학기파이선스터디/ 튜플, 사전 . . . . 5 matches
         - 튜플과 리스트의 차이점은 튜플은 변경 불가능형이라는 것과, 리스트가 갖고 있는 것과 같은 메쏘드(자체 함수)를 갖지 않는다는 것이다.
         1. 함수에 있어서 하나 이상의 값을 리턴하는 경우
         3. apply 함수를 사용할 때
         함수를 키나 값으로 활용할 수도 있다.
         4. D.has_key(key) : 멤버십 테스트. D가 key를 가지고 있는가 검사. 있으면 참(1), 없으면 거짓(0)을 리턴.
  • 2학기파이선스터디/모듈 . . . . 5 matches
          * 프로그램(함수, 클래스... )과 데이터를 정의
          * 사용자가 모듈에 정의된 함수나 변수의 이름을 사용하도록 허용하는것 ( = 라이브러리)
          * 모듈, 함수, 클래스 등..
  • 5인용C++스터디/API에서MFC로 . . . . 5 matches
          * 윈도우즈 프로그래밍을 보다 객체지향적으로 하기 위하여 MS에서 만든 클래스 라이브러리.
         === 윈도우즈 프로그래밍에 필요한 요소들을 클래스로 포장 ===
         === 매크로와 가상함수를 이용한 메시지 처리 ===
          * ClassWizard - 클래스함수 오버라이딩, 메시지 처리 등 복잡한 과정을 자동으로 처리해주는 툴.
  • AcceleratedC++/Chapter3 . . . . 5 matches
          * push_back : vector의 멤버 함수. vector의 끝에다 집어넣는 역할을 한다. 그러면서 벡터의 크기를 하나 증가시킨다.
          * size() 멤버 함수 : vector가 소지하고 있는 값들의 갯수를 리턴해준다.
          return 1; // main함수가 0을 리턴하면 성공적으로 끝난것이고, 그 외의 숫자는 실패적으로 끝난것이다.
  • CPPStudy_2005_1/Canvas . . . . 5 matches
          * 슈퍼 클래스
          * 아래 4가지를 서브 클래스로 가진다.
          * Draw, Add, Remove 함수를 virtual 함수로 가진다.
         === 클래스 사용 예 ===
  • CollectiveOwnership . . . . 5 matches
         만약 누군가가 클래스의 인터페이스를 변경했으면 변경된 클래스를 사용하는 모든 클라이언트 코드에서 오류가 발생할 것이다. 그렇게되면 클래스를 변경한 사람이 모든 오류를 수정해야만 하는가, 아니면 먼저(컴파일 시간에 오류가 발생할꺼 같은데) 발견한 사람이 수정해야 하는가?
         코드 커밋된 상태에서 하나라도 테스트 실패가 있다면 롤백하거나, 수정한다. 고로, 클래스를 변경한 사람이 모든 오류를 수정해야 한다. 만약 이후에 오류를 발견하게 된다면 누구든지 수정할 수 있고, 또 그래야 한다.
         특히 이미 많이 코드가 작성된 시점에서 클래스의 인터페이스를 변경하는 것은 너무 많은 코드를 바꿔야하기 때문에 걱정(귀찮음?)이 앞설 수 있다.
  • CppStudy_2002_1/과제1/CherryBoy . . . . 5 matches
          cout << "당신은 출력 함수를 " << count << " 번 사용하셨습니다.\n";
         //함수는 사용자에게 이름과 핸디켑을 요구한다
         //함수는 전달인자로 전달된 값들을 사용하여
         //함수는 handicap을 새값으로 초기화한다.
         //함수는 golf 구조체의 이름을 표시한다
  • CppStudy_2002_2 . . . . 5 matches
          * C++의 클래스 부분을 미리 여러가지 과제들과 함께 같이 공부하는 공간입니다.
         || 7.18 ||["CppStudy_2002_2/객체와클래스"]||["CppStudy_2002_2/슈퍼마켓"]||
         || 7.25 ||["StringOfCPlusPlus"]||11.클래스와 동적 메모리 할당||
         || 8.9 ||STL(["STL/vector/CookBook"])과 리펙토링 몇가지||STL(["STL/vector/CookBook"], ["STL"])과 12.클래스 상속||
          * 소스 올리고 난 다음 코드 리뷰 해보는지? 사람들이 꽤 중복된 코드를 쓴다던지, UI 부분과 로직 클래스 부분이 너무 같이 붙어있다던지 하는 것 같은데.. 재동 당신의 능력을 보여줘; --["1002"]
  • DoubleBuffering . . . . 5 matches
          // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
         // Timer가 호출하는 함수 내부
         // OnDraw 함수 내부
         화면 전체를 한꺼번에 렌더링 한 다음 버퍼를 바꿔주는 방식을 이야기하는 것 보면 아마 Page Fliping 을 이야기하시는듯. 단, 이것은 GDI 로는 불가능하지 않을까요? ^^ DC 핸들을 우리가 직접 조작할 수는 없는 것이고.. 말 그대로, 버퍼를 바꾼다는 것은 화면에 표시해 주는 메모리를 가리키는 포인터의 값을 바꾸는 거니까. Page Fliping 은 DOS나 DX에서는 가능할지 몰라도 GDI 에서는 불가능한 방법일것이라는 개인적 생각. (DC에 Select 되어있는 Bitmap 을 다시 셋팅해주는 방법은 어떨까. 한번도 안해봤지만. --;) [[BR]]
         ["데기"] : ㅋㅋ, 표현이 조금 문제를 일으킬줄 알았어요. 화면 전체라 함은 클라이언트 영역을 얘기한 것이고, 버퍼를 바꾼다는 얘기는 포인터만 바꾼다는게 아니라 디바이스 버퍼 내용을 바꾼다는 얘기한거예요. 인수야, 내 애매한 표현땜에 페이지 플리핑이랑 헷갈리지 말어. ^^; [[BR]]
  • EffectiveSTL/Iterator . . . . 5 matches
          * 밑에께 안되는 이유는 iterator와 const_iterator는 다른 클래스이다. 상속관계도 아닌 클래스가 형변환 될리가 없다.
          * vector<T>::iterator는 T*의 typedef, vector<T>::const_iterator는 const T*의 typedef이다. (클래스가 아니다.)
          * string::iterator는 char*의 typedef, string::const_iterator는 const char*의 typedef이다. 따라서 const_cast<>가 통한다. (역시 클래스가 아니다.)
          * 하지만 reverse_iterator와 const_reverse_iterator는 typedef이 아닌 클래스이다. const_cast<안된다>.
  • HardcoreCppStudy/첫숙제/ValueVsReference/임민수 . . . . 5 matches
         c++ 프로그래밍에선 사용자 함수를 많이 쓰게 되는데,
         변수 선언시에 전체 선언이 아니라 함수안에서 지역선언으로 하게되면
         다른 함수에서는 그 변수를 사용할 수가 없게됩니다.
          참조전달에 의한 함수를 사용하였을경우 변수 자체의 값이 바뀌기 때문에 위와 같은 결과가 나옵니다.
          * main() 함수의 리턴형이 void 이기 때문에 return 0은 쓰면 안 됩니다. -영동
  • JTDStudy/첫번째과제/원명 . . . . 5 matches
         초기의 테스트 가능하도록 원하는 값으로 무작위로 나오는 답안을 세팅하는 함수 추가.
         setCorrectNumber 하기도 귀찮아서 compare 부분을 확장 , 내부에서 쓰일일이 없는 함수로 제거 목적으로 코스 수정
         특정 포지션의 숫자를 얻어오기 위한 반복 부분들 발견, 특정 포지션을 얻어오는 함수 만들기
         해당 함수를 알고리즘에 적용, Test는 계속 녹색 .
         더이상 함수가 this.correctNumber에 의존할 필요 없으므로 코드 개선
  • JUnit/Ecliipse . . . . 5 matches
         따라서 별도의 다운로드 및 인스톨 과정없이 보다 편하게 JUnit을 사용할 수 있는 강점이 있으며, 실제로 마우스의 클릭 몇번으로 대부분의 클래스 및 메서드를 생성해 주는 강력한 기능을 지원합니다.
         위의 샘플 클래스를 JUnit을 통하여 테스트 해보도록 하겠습니다.
         다음으로 자신이 테스트를 하고 싶은 메서드에 체크를 하고 Finish 하면 TestCase를 상속받는 새 클래스를 자동으로 생성하여 줍니다.
         아래와 같은 새 클래스가 생성되었습니다.
         Ch03_01 클래스의 allocate() 메서드를 다음과 같이 수정합니다.
  • LoveCalculator/허아영 . . . . 5 matches
          tolower(해당문자를 소문자로 바꿔줌, 소문자면 그대로)함수 또는 toupper(대문자로)를 쓰고 알파벳에서 숫자가 아닌 문자(alpha = alpha - 'a' +1)로 처리 하였다면 대소문자 따로 처리할 필요 없었고, 가독성 또한 좋아지지 않았을까? - [이영호]
          - 좋은 방법이군요 . 잘 보면 함수가 있는 것들이 많네요.
          이번에 아영이 함수 잘 나눈거 같다.
          그래서 gets쓰고 저런함수들 썼구나 ㅠㅠ - [zyint]
          그래서 또고쳤...;;ㅁ;; 킁..ㅎ 그리구 아영이두 함수 나누는거 수준급이양..ㅎ - [조현태]
  • MFC/Control . . . . 5 matches
         하나의 컨트롤은 클래스와 연계될 수도, 안될 수도 있다. 정적 컨트롤의 경우 클래스가 필요없을 것 같지만 CStatic 이라는 클래스를 통해서 모양을 변경하는 것이 가능하다. 마찬가지로 버튼 컨트롤들의 경우도 대부분 Dialog 객체를 통해서 처리가 된다. CButton 클래스의 경우에는 컨트롤을 관리하는데있어서 객체가 필요할 경우에 이용하게 된다. 이러한 모든 컨트롤들은 모두 윈도우의 일종이기 때문에 CWnd 에서 상속된 클래스를 이용한다.
  • ObjectProgrammingInC . . . . 5 matches
         결국 포인터.
         attrib을 찍는다는 문제를 주셨는데... attrib가 private라 가정하고, 따라서 method1의 함수가 구조체(클래스)의 attrib을 고친다는 뜻으로 판단하고 생각해본다면... C++의 this란 예약어가 없다면 C언어에서 C++과 같은 class의 표현은 어려울 듯. 메모리주소로 가능을 할 수도 있으나, 코드 조작을 어셈블리 차원으로 내려가 하나하나 손봐야함... (이 답이 아니라면 낭패)
         함수인자로 명시적으로 포인터를 넘겨주던지 해야겠네 ㅡ.ㅡ;; 결국 뻘짓이구만 ㅋㅋㅋ - [eternalbleu]
  • Polynomial . . . . 5 matches
          다항식을 표현하는자료구조는 크게 두가지로 생각해 볼 수 있다. linked list 와 array 이다. 배열은 모두들 잘 알겠고 linked list 는 동적으로 storage를 할당받아 각 노드를 포인터로 연결한 자료구조를 말한다..(라고 우선 설명만 해둬야지 정확한 정의는 내리지 못하겠다..-_-). 물론 동적으로 할당받지 않고도 linked list 를 구현할수 있지만 그럴꺼면 배열로 하는게 낫지 그 노가다를 뭐하러 하나...-_-
          // 위의 정의한 구조체에 포인터 변수 두개가 더 필요하다.
          다음과 같은 prototype 을 갖는 함수를 구현해야 한다. (이름은 달리해도 상관없다..)
          * 다항식을 표현하는 클래스를 만들어서 operator overloading 을 사용해도 되겠지만 이는 위에 말한 내용을 이미 구현한 후 이걸 클래스로 포장하는거기때문에 지금수준에서는 무리라고 생각됨... - 임인택
  • RubyLanguage/ExceptionHandling . . . . 5 matches
          * 예외 클래스들은 Exception 클래스를 상속받는다.
          *사용법 : rescue 예외클래스
          * 예외 클래스를 상속하여 새로운 예외 클래스를 추가할 수 있다
  • Spring/탐험스터디/2011 . . . . 5 matches
          리소스 함수의 4가지 method : CRUD(Create, Read, Update, Delete)
          1.2. Runtime Injection : 다형성을 만들기 위해서 사용한 방법. 개인적으로 코딩할 때 다형성의 사용이 좀 부족하다고 느꼈는데, Runtime시에 오브젝트간의 관계를 맺게 하지 않고 그냥 클래스에 맞춘 코딩을 했기 때문인 것 같다. 앞으로 코딩을 하는데 머릿속에 넣어두고 자주 써 보는 것이 좋을 것이라 생각된다.
          1.1. DIP : 멤버 변수를 외부에서 주입 받을 때는 구체 클래스가 아닌 인터페이스를 이용한다. 최대한 클래스 내부에서 변수를 할당하지 말고(new를 사용하지 말고) 주입을 받도록 한다.
  • SuperMarket/세연/재동 . . . . 5 matches
         2. 중복된 곳이 많던 buy()함수와 cancel()함수를 집중적으로 수정
         3. 클래스명과 함수명 그리고 변수명을 좀 더 평범하게 변형
         4. getMyMoney() 함수를 public에서 private로 변경
  • TheGrandDinner . . . . 5 matches
         올해 ACM 국제 대회 결선에 참가한 모든 팀은 시상식 후에 있는 대만찬에 참석해야 한다. 서로 다른 팀에 속한 멤버들이 최대한 서로 어울릴 수 있게 하기 위해, 한 테이블에 같은 팀에 속한 멤버가 두 명이상 앉을 수 없도록 했다.
         각 팀에 속한 멤버들의 수(경시대회 참가자, 감독, 후보 선수, 참관인 모두 포함)와 각 테이블에 앉을 수 있는 사람 수가 주어졌을 때 처음에 정한 규칙대로 모두 앉을 수 있는지를 결정해야 한다. 규칙대로 앉을 수 있다면, 좌석 배치 방법을 출력한다. 여러 방법으로 배치할 수 있는 경우에는 아무 방법이나 출력해도 된다.
         한 개 이상의 테스트 케이스가 입력된다. 각 테스트 케이스의 첫째 줄에는 팀 수를 나타내는 1 이상 70 이하의 정수 M과 테이블 개수를 나타내는 1 이상 50 이하의 정수 N이 입력된다. 각 테스트 케이스의 둘 째줄에는 M개의 정수가 입력되는데, i번째 정수는 i번째 팀의 멤버 수를 나타낸다. 각 팀의 인원은 100명을 넘지 않는다. 셋째 줄에는 N개의 정수가 입력되며, j번째 정수인 n<sub>j</sub>는 2 이상 100 이하며 j번째 테이블에 앉을 수 있는 사람 수를 나타낸다.
         각 테스트 케이스에 대해 좌석을 배치할 수 있으면 1을, 그렇지 않으면 0을 출력한다. 배치가 가능한 경우에는, 그 밑으로 M줄에 걸쳐 좌석 배치를 출력하는데, i번째 줄에는 i번째 팀 멤버들이 앉을 테이블 번호(1에서 N까지)를 출력한다.
  • TheJavaMan/설치 . . . . 5 matches
         2. '''File->New->Class'''로 클래스 하나를 만든다. 자바는 C와는 다르게 클래스를 꼭 만들어야 한다. 그리고
         클래스 이름은 첫번째 문자가 꼭 대문자여야 해. 그리고 클래스 만드는 창에서 아랫부분에 있는
         나는 클래스이름을 Hello라고 한거구
  • VendingMachine/세연/재동 . . . . 5 matches
         2. 중복된 곳이 많던 buy()함수와 insertDrink()함수를 집중적으로 수정
         3. 클래스명과 함수명 그리고 변수명을 좀 더 평범하게 변형
         4. showDrinkMenu() 함수를 private로 만듬
  • WinampPlugin을이용한프로그래밍 . . . . 5 matches
          // 모듈 관련 포인터 얻어오는 부분
          // 함수포인터들을 적절하게 매핑해준다.
          // 여기서는 화면 출력 부분이 없으므로 비어있는 callback 함수를 만들어서 연결해준다.
          // 추후에 Visualization 부분을 만들때는 실제 함수부분을 이용하게 될 것이다.
  • django/RetrievingObject . . . . 5 matches
         데이터베이스에서 레코드를 조회할 때는 Model클래스를 관리하는 Manager클래스를 이용한다. 가장 간단하게는 모든 레코드를 가져오는 방법이 있는데, 모델마다 기본적으로 제공되는 object라는 매니저를 이용한다. object 매니저로 레코드를 조회하면 QuerySet이 반환된다. 이는 관계형 데이터베이스 CLI인 JDBC의 ResultSet과 유사하다.
         사용자는 values함수를 이용해서 원하는 속성을 지정할 수 있다. 이는 검색 조건을 만족하는 레코드의 필요한 속성만을 이용하므로 효율적이다. 또한 values함수는 QuerySet을 상속한 ValuesQuerySet을 리턴하므로 다시 위에서 사용한 검색 조건을 사용할 수 있다. 하지만 ValuesQuerySet은 사전형(dictionary) 자료구조를 가지고 있기 때문에, 많은 수의 레코드를 얻어오기에는 부적절하다. 다음은 사원 정보에서 이메일 속성만을 얻어온다.
         Django에서 기본적으로 제공하는 조인 연산은 없다. SQL문을 직접 수행하여 원하는 결과를 얻을 수 있다. 이는 JDBC의 인터페이스와 비슷하며, 커서를 이용하여 질의를 수행한 결과를 하나씩 얻어오는 방식을 사용한다. 다음은 특정 부서 에서 시행한 위험 관리 대책을 얻어오는 함수이다.
  • 고한종 . . . . 5 matches
          * 원본 프로그램은 ActiveX로 만들어져있었다. 게다가 스레드 돌리기 싫어서 DoEvent 기법을 썼다(...) 이걸 나는 iOS로 포팅 하는데 성공했다. ActiveX도 결국 MFC이기 때문에 별로 안 어려워 보일 수 있으나... 모든 사용자 정의 함수는 void형에, 모든 멤버변수는 public이어서 어디서 초기화하는지 일일히 찾아서 작업해야 했다. 미치는줄 알았음. 심지어 한 함수안에서 딱한번 쓰는 변수도 클래스 멤버변수로 선언되어 있기도 했음.. 그냥 지역변수를 쓰지!? - [고한종], 13년 3월 16일
  • 데블스캠프2005/RUR-PLE . . . . 5 matches
          * Python 문법 기반이지만, 몰라도 상관없다. 주어진 함수들을 가지고 해결해 나가기 때문이다. 변수도 안쓴다. -_-
          * 아래와 같이 def 를써서 함수를 정의할 수 있다.
          * repeat 명령어를 써서 여러번 수행해야 하는 함수(명령어 포함)을 한번에 방복 횟수만 지정해서 사용할 수 있다.
          * 벽 만들기 연습에서 한 코드들을 함수화 해서 중복 제거를 한다.
          * 위의 if문과 함수 정의, repeat를 사용하여 아래 화면과 같은 상황을 처리한다.
  • 데블스캠프2012/둘째날/후기 . . . . 5 matches
          * [김태진] - JavaScript를 많이 쓰던 때는 1학년 방학때랑 동문네트워크 만들 때 뿐이었는데, 그때는 좀 객체에 관해서 따지진 않고 했습니다. 그에비해 이번엔 엄청난 추상화를 할 수 있다는걸 다시 한번 생각해보고, 음.. 재밌는 언어네요. 방학중에 여행갔다오거든 Canvas로 뭔가 해보고싶기도 하고, 그렇네요. 작년에 피보나치를 함수형으로 짜라고 할땐 멘붕했는데, 이번엔 한글 문제를 그냥 for문으로 쓴지라 쉬웠달까요..
          * [서영주] - 자바스크립트는 그냥 단순하게 예제만 보면 그렇게 안어려워 보이는데 제대로 코드를 짠걸 보거나 오픈API관련을 보고 쓰려고 하면 그런건 예제처럼 코드가 예쁘지가 않더라고요. -_- 틀림없이 현실은 오늘 본 것의 이상이겠죠. 게다가 클래스에 나중에 변수를 추가한다거나 .prototype은 뭔지 등등... 그래도 웹 이외에도 많이 쓰이기도 하니까 피해갈 수 없는 언어 중의 하나겠죠. 언젠가 제대로 공부해보고 싶긴 하네요.
          * [서영주] - 코드를 이상하게 만드는 방법은 정말 다양하다는걸 알았습니다. #define이나 흔히 사람들이 생각할 함수의 인자명을 이상하게 하는 것 등등. 근데 단순히 함수, 변수의 이름, 인자의 이름 등에 관한 네이밍만으로도 상당히 헷갈릴 수 있는걸 보고 단순하지만 네이밍의 중요함을 다시 한 번 느꼈습니다. 이상한 기능이야 안쓰면 그만이겠지만 네이밍같은 부분은 안할수가 없을테니까요.
          * [서민관] - 전에도 ZP 홈페이지에 올라왔어서 읽어봤었는데, 저런 코드를 짜면 본인도 유지보수가 불가능하지 않은가 싶네요. 그리고 새삼 느낀 거지만 역시 변수명이나 함수명이 프로그래밍에서 참 중요하지 싶습니다.
  • 문자반대출력 . . . . 5 matches
          * 함수를 만든다.
          * 맞게 푼건지는 모르겠지만 파이썬은 자체적으로 거꾸로 해주는 함수가 있어서 솔직히 이런 문제는 풀기가 굉장히 쉽다. 위에서 저거 걸린 시간은 파일 입출력과 그 해당 함수 찾는 시간.. - 상협
          * C 에도 라이브러리로 문자열 반전 시켜주는 함수를 제공합니다. strrev()라는 함수를 사용하면 '\0'바로 전 글자부터 거꾸로 만들어주죠. 물론 ANSI 표준은 아니고 Semantec, Borland, Microsoft 에서 제공하는 컴파일러의 경우에 자체 라이브러리로 제공합니다. 이식성을 생각하지 않는 일반적인 코딩에서는 위에 나열한 컴파일러를 이용한다면 사용할 수 있습니다. - 도현
  • 문자반대출력/김태훈zyint . . . . 5 matches
         strlen이라는 기본 함수가 있긴한데(아영이 소스 보고 알았음;;)
         심심해서 메인함수는 걍 짧게 해보았음;;
         //함수를 역순 시킵니다.
         물어볼 게 있는데, strlen 함수 만들었잖아. 너가 그 함수 만든 원리 설명좀 ^^ --[아영]
  • 삼총사CppStudy/숙제2 . . . . 5 matches
         3차원 CVector 클래스를 만들어봅시다.
         1. 멤버 변수는 3개 입니다. x좌표, y좌표, z좌표
         2. 멤버 함수는 다음과 같습니다.
          추가로 생성자라던지 초기화 할 수 있는 함수를 추가로 넣어줘야 합니다.
  • 새싹C스터디2005/pointer . . . . 5 matches
         보다 명확한 포인터 설명을 위한 예제와 자료들
         포인터를 쓰지 않을 경우와 비교하면 이해가 쉽다.
         별표가 나타내는 값은 포인터가 가리키는 값(주소)의 값이다.
         음... swap 함수에서 값이 정수(배열, 포인터 주소를 제외한 모든 값.)일 경우 xor 치환으로 간단하게 변경 가능합니다.
  • 새싹교실/2011/쉬운것같지만쉬운반/2011.3.23 . . . . 5 matches
         3. 나는 프로그램이 실행되고 CPU가 맨 먼저 호출하는 함수가 뭔지 안다! (O/X)
          * 후후 하스켈은 순수 함수형 C는 절차형으로 종류가 다른 언어에요~ - [서지혜]
         assert함수에 의해 c가 30인지 비교한다.
         c는 30이므로 비교 결과가 참이 되기 때문에 assert함수의 호출이 종료된다.
         상기 코드가 정상적으로 진행되었기 때문에 main함수는 0을 리턴하고 프로그램이 종료된다.
  • 새싹교실/2012/AClass/5회차 . . . . 5 matches
         2.Swap함수 작성
         2.Swap함수 작성
         2.Swap함수 작성
         2.Swap함수 작성
         #include <string.h> // strlen() 함수 사용하기 위해
  • 새싹교실/2012/새싹교실강사교육/2주차 . . . . 5 matches
         -과제 확인, 프로젝트 생성, GCC사용법, 컴파일, main함수, 변수, Data Type, 연산자, 입출력 기본 함수, 제어문 -
          select = getch(); //getch()는 char형 한글자를 받아주는 함수.
         2.2 #include<stdio.h>, printf(), scanf(); 입출력 함수.
         srand(time(NULL)), rand(). 함수와 라이브러리.
  • 서울대컴공대학원구술시험/05전기 . . . . 5 matches
         하나는 바이너리 트리 관련 함수 하나 보여주고 머하자는 알고리즘인지 설명해라
          a)뭐하는 함수인가 b)몇번 함수 콜 되는가
         int max(int, int)는 두 인자중 큰 수를 반환하는 함수입니다. a) 트리의 높이를 구하는 함수 b) 2n + 1
  • 이영호/64bit컴퓨터와그에따른공부방향 . . . . 5 matches
          └저도 C (배우게 된다면 Assembly도.ㅎ)를 좋아 합니다.ㅎ 무엇보다 빠른 연산속도와 하드웨어 제어(해본적은 없지만), 포인터를 통한 메모리 접근등 좋은 점이 많아요.^^* 그렇지만 예를 들어 1만 팩토리얼을 출력하는 프로그램을 작성하시오. 라고 문제가 주어졌을때, C로 짜면 한나절이지만 파이썬으로 작성하게 되면 5분도 안걸리게 됩니다. 물런 연산속도가 느리기는 하지만 말입니다.^^ 이런 점에서 봤을때, 속도가 중요하다거나 특화된 프로그램을 작성해야할 경우에는 C와 같은 언어가 좋지만 보편적으로 사용하는 워드프로세서라든지 기타 응용프로그램이나, 제작해야할 프로그램의 제작시간이 짧을 경우에는 상위레벨의 언어가 좋을거라고 봅니다.^^ 뭐 이렇게 말은해도.. 사실 서로의 장점을 그때그때 맞춰서 섞어쓰는게 가장 좋지 않을까요?ㅎ (게임을 만들때 하위레벨의 언어로 하드웨어를 직접 사용한다 하더라도, 다이렉트를 이용하지 각각의 그래픽 카드에 맞춰서 프로그램을 만들지 않는것과 비슷한것 같아요.^^) 이상 지나가는 행인1의 잡다한 생각이었습니다.^^* - [조현태]
         (우선 제 지문의 맥락을 담은 질문부터. 과연 Java와 Python 개발자들이 Assembly+C개발자와 같이 좋은 효율의 다른언어 컴파일러를 만들 수 있을까요. 현재 함수보다 좋은 함수를 생각해 냈는데 그것을 구현하려면 low level의 지식이 필요한데, 자신은 Java와 Python 들만 알고 Assembly를 모른다면 어떻게 해야할까요?)
         선배님께서 82년부터 기계어로 해오신 것들이 다른 언어를 접하고 그 기초를 익힐때 도움이 안되었을까요? C언어의 포인터만 생각해도 C언어를 처음 접하는 사람과 어셈블리를 접하고 C언어를 접하는 사람에게는 큰 차이가 있을 것 같네요.(저 역시 포인터의 어설픈 이해를 어셈블리를 조금 공부해보고 제대로 잡았으니까요) C언어만 접한 사람들이 왜 상수를 고치지 못하는지 제대로 이해할까요? (C언어 책의 대부분은 상수는 고치지 못한다라고만 말하지 메모리의 실행 코드 부분이어서 고치지 못한다고는 말을 하지 않죠 :) )
  • 이영호/My라이브러리 . . . . 5 matches
         // set*, get* 함수를 더 만들자.
         // send 함수 시 인자 4개가 필요하기 때문에 2개로 줄인 함수다. 단, ascii문자만 전달 된다. recv 함수는 만들 필요가 없다.
         // udp를 함수에 넣어도 되지만 그렇게 되면 다른 종류의 socket 들도 넣어 차후 확장성이 떨어질것 같아 분리함.
  • 코드레이스/2007/RUR_PLE . . . . 5 matches
          * Python 문법 기반이지만, 몰라도 상관없다. 주어진 함수들을 가지고 해결해 나가기 때문이다. 변수도 안쓴다. -_-
          * 아래와 같이 def 를써서 함수를 정의할 수 있다.
          * repeat 명령어를 써서 여러번 수행해야 하는 함수(명령어 포함)을 한번에 방복 횟수만 지정해서 사용할 수 있다.
          * 벽 만들기 연습에서 한 코드들을 함수화 해서 중복 제거를 한다.
          * 위의 if문과 함수 정의, repeat를 사용하여 아래 화면과 같은 상황을 처리한다.
  • 타도코코아CppStudy/0724 . . . . 5 matches
          * 객체지향, 클래스, 상속 발표
          * 가상함수 : [수진]
          * 객체지향, 클래스, 상속 발표
         || 파스칼의 삼각형 || [수진] || Upload:pascal_sujin.cpp || 헉.. 줄까지 맞추다니 멋져요.^^ 함수 분리도 꽤 잘한거 같고.. 무엇보다 다른 개념(조합)을 사용했네요. 여태까지 한 사람들은 거의 다 위에꺼 더해서 했거든요. 하지만 로직과 보여주는게 분리가 안되어 있네요. 이따 저와 함께 고쳐 봅시다. ||
          * 가상함수 : [수진]
  • 2학기파이선스터디/클라이언트 . . . . 4 matches
          * ChatMain? : 채팅의 주 인터페이스를 관리하는 클래스이다. 이 클래스에서 대부분의 GUI를 관리하고, 채팅메세지보여준다. 또한 채팅에 접속한 사람들의 ID를 보여준다.
          * ReceiveMessage? : 서버로부터 전달되는 메시지를 받아서 ChatMain? 클래스의 메시지 출력 화면에 보여주는 역할을 한다.
          * UserList? : ChatMain? 클래스의 사용자 List에 접속한 사용자 ID를 보여주는 기능을 한다.
  • 5인용C++스터디/멀티쓰레드 . . . . 4 matches
         프로그램 작성하다 보면 프로그램 수행도중 현재 프로그램은 다른 작업을 수행하면서 또하나의 작업을 수행하고자 할 때가 있을 것입니다. 이때 사용하는 것이 바로 스레드 입니다. 작업을 함수로 프로그래밍을 하고 난후에 이것을 스레드로 형태로 실행하면 됩니다
         MFC에서는 다음의 6가지 클래스를 멀티쓰레딩을 위해서 제공합니다.
         동기 클래스인 CSyncObject, CSemaphore, CMutex, CCriticalSection, CEvent와 동기화된 접근을 허용하는 CMultiLock과 CSingleLock이 그것이니다.
         이중 CSyncObject는 CSemaphore, CMutex, CCriticalSection, CEvent의 상위 클래스로서 직접 사용하지는 않습니다.
  • 8queen/손동일 . . . . 4 matches
          // int x = rand(); // rand()함수는 랜덤한 숫자를 리턴하는 함수입니다.
         //두번째 줄에도 랜덤함수를 생성
         //그 줄에서 0 이 아닌 칸에 랜덤 함수를 생성하라...
  • ACM_ICPC/2011년스터디 . . . . 4 matches
          * 하면 할수록 입출력에 대한 감각이 어느 정도 살아나는 것 같습니다. 처음 접했을 때보단 생소하게 느껴지진 않네요. 처음에는 무슨 삽질을 했길래 그랬을까... 숏코딩을 처음으로 한번 해봤는데 역시 컴파일러에 대한 깊은 이해와 고도의 수학적 사고력이 요구되는듯 싶습니다. 졸리점퍼 71B는 도데체 어떤 코드일지... 처음에는 관심없었는데 해보니까 승부욕이 생깁니다.. 그것보다 해시함수나 B트리 등 심층적으로 다뤄보지 못한 알고리즘에 대한 의욕도 있지만.. 음!! 하고 싶은게 너무나 많네요. -[정진경]
          * 재귀함수와 백트래킹, Dynamic Programming에 난항을 겪어 최적해구하는 문제에서 고전했습니다.
          * [김태진] - 파닭문제를 드디어 풀었습니다. 풀기까지 재귀함수 문제들도 풀어보고, Hanoi문제도 풀어보고, Mario문제도 이렇게 풀었다 저렇게 풀었다를 몇시간째, 진경이가 for문으로 Mario를 풀어보라기에 꾸역꾸역풀고나니, !!! 파닭푸는 방법을 알았다! 며 10분만에 해결했습니다.-- 파닭문제 프로젝트를 만든지 1달째인데 푼건 10분도 안걸린.... 네, 아무튼 약속대로 소현이누나가 파닭을 쏘네요+_+!
          * [김태진] - 보물찾기를 풀고 있습니다. 우선 테스트케이스 5번까지는 통과를 했지만 6번은 Time Limit Exceeded.. 포인터를 통해서 해보라는 진경이의 힌트를 받고 Search대신 다른 방식으로 할 걸 생각해보고 있습니다.
  • AseParserByJhs . . . . 4 matches
          static vec3_t PickedPoint[2]; // 위의 함수에서 계산한 결과가 저장된다.
          pNodeList [i2]->SetChildPointer (pDest); // 새 메모리를 자식 포인터로 지정
          rewind (s); //파일포인터를 맨 앞으로..
          pTex = new char*[n]; //pTex 는 이중 포인터
  • BasicJava2005/3주차 . . . . 4 matches
          * 1.4이전 : BufferedReader클래스를 사용할 수 있다.
          * 5.0 이후 : Scanner 클래스를 이용하여 입력받을 수 있다.
          * 동적 배열 클래스
          * add/remove/get 함수등을 사용하여 배열에 마음대로 추가/삭제가 가능하다.
  • Boost/SmartPointer . . . . 4 matches
         스마트 포인터 쓰기
          * 표준 라이브러리에도 auto_ptr 이라고 같은 개념의 클래스가 있지만, 버그가 있다. -_-;; auto_ptr를 컨테이너에 집어넣으면 버그땜시 스스로 삭제가 안되 메모리가 새는 아주 심각한 문제이다.
          * 모든 객체에 스마트포인터를 쓰도록 프로그램 짜면 자바같은 느낌으로 짤수도 ...
         shared_ptr_example2.hpp (헉 이너클래스가 되네.. 처음봤다 --;;)
  • BoostLibrary/SmartPointer . . . . 4 matches
         스마트 포인터 쓰기
          * 표준 라이브러리에도 auto_ptr 이라고 같은 개념의 클래스가 있지만, 버그가 있다. -_-;; auto_ptr를 컨테이너에 집어넣으면 버그땜시 스스로 삭제가 안되 메모리가 새는 아주 심각한 문제이다.
          * 모든 객체에 스마트포인터를 쓰도록 프로그램 짜면 자바같은 느낌으로 짤수도 ...
         shared_ptr_example2.hpp (헉 이너클래스가 되네.. 처음봤다 --;;)
  • C++스터디_2005여름/학점계산프로그램/허아영 . . . . 4 matches
          오옷.. 근래 본 메인함수중에 가장 심플한 함수였어~ 왠지 Hellow world!! 도 이보단 못할듯.ㅎ
          칼큘레이트(귀차니즘으로 영어 생략)함수와 스튜던트 함수 양쪽에서 둘다 파일 입출력 하는게 있는것 같은데..
  • CNight2011 . . . . 4 matches
          * C언어의 포인터, 구조체에 대해서 다시 잘 정리했던 기회였습니다. 밤을 새면서 정신은 제 곁을 떠났지만 C언어 문법에 대해서 잘 알게되었습니다. 11학번이 얻어가는 것이 있는지 궁금하네요. - [윤종하]
          * 이번 스터디를 통해서 포인터랑 배열의 관계를 완전히 암기하게 되었습니다. 그리고 동적할당을 쓸 수 있게 되었습니다! 이게 가장 큰 소득이라고 생각합니다. 메모리 그려가면서 남에게 설명해주라고 하면 할 수 있을 것 같은 느낌이 듭니다. 아, 구조체는 아직 어떻게 쓰는지 잘 모르겠어욤.... 링크드 리스트도 쓰는 건 잘 모르겠습니다. 뭐 하는 건진 잘 알겠습니다. 이런 활동 언제든지 환영입니다. 밤샘은 정신을 맑게 해주니까요 (?) - [고한종]
          * 12시 30분쯤, 도중에 참여했습니다. 피곤피곤.. 뭔가 C언어와 관련된 활동을 했었어야했는데. 백트래킹, DP를 설명만 하고 구현을 안했네요-_-; 다음에 기회가 된다면 재귀함수를 실제로 응용하는 방법에 대해 알아볼 시간이 있으면 좋겠네용 - [정진경]
          * 많다면 많은 정보들이 한꺼번에 머릿속에 들어왔었는데요, 이것 저것 배우면서 저게 유용하긴 한데.. 분명 포인터랑 연관되어있다긴 하는데 뭐가 어떻게 연관된거야?! 라고 하다가 Linked List를 배우면서 왜 구조체가 필요한지(very powerful!) 왜 많은 수의 자료들을 무조건 배열로만 쓸 수는 없는지등 많은 것을 알게되었어요. 나중에는 카트가 3D면서 렉없는 상당히 잘만든 게임이라는 말도 들었는데, 자료가 유동성 있으면서 접근하기 쉬운 그런걸 만든다는게 쉬운 것만은 아니겠구나 라고 생각했지요. 자구를 공부하면 이런 부분을 공부하는거겠죠. 재밌겠네요+_+(까봐야 알지만) -[김태진]
  • Code/RPGMaker . . . . 4 matches
         = Table 클래스의 구현 =
         = Color 클래스의 구현 =
          알만툴에서 사용하는 Color 클래스이다.
          내부적으로 자바의 java.awt.Color 클래스를 가지고 있으며 이를 이용하여 모든 값을 주고받는다.
  • ConstructorMethod . . . . 4 matches
         하지만 이 방법은 쓸만한 인스턴스를 만들기 위해 클래스의 레퍼런스를 찾아봐야 하는 등의 골치 아픈 문제가 있다. 특히 클래스가 복잡할때는 문제가 좀 커진다.
         개인적으로는 JUnit Test 작성할때, Test 대상이 되는 클래스에 대한 리팩토링 시도하는중 중간단계 역할로 많이 써먹었음.
          음.. 오버로딩이 없나요? 보면 new랑 new:이렇게 두개 있는 클래스도 있던데... 저건 아예 다른 메세지인가요? --[인수]
  • EightQueenProblemSecondTryDiscussion . . . . 4 matches
         제가 보기에 현재의 디자인은 class 키워드만 빼면 절차적 프로그래밍(procedural programming)이 되는 것 같습니다. 오브젝트 속성은 전역 변수가 되고 말이죠. 이런 구성을 일러 God Class Problem이라고도 합니다. AOP(Action-Oriented Programming -- 소위 Procedural Programming이라고 하는 것) 쪽에서 온 프로그래머들이 자주 만드는 실수이기도 합니다. 객체지향 분해라기보다는 한 거대 클래스 내에서의 기능적 분해(functional decomposition)가 되는 것이죠. Wirfs-Brock은 지능(Intelligence)의 고른 분포를 OOD의 중요요소로 뽑습니다. NQueen 오브젝트는 그 이름을 "Manager"나 "Main''''''Controller"로 바꿔도 될 정도로 모든 책임(responsibility)을 도맡아 하고 있습니다 -- Meyer는 하나의 클래스는 한가지 책임만을 제대로 해야한다(A class has a single responsibility: it does it all, does it well, and does it only )고 말하는데, 이것은 클래스 이름이 잘 지어졌는지, 얼마나 구체성을 주는지 등에서 알 수 있습니다. (Coad는 "In OO, a class's statement of responsibility (a 25-word or less statement) is the key to the class. It shouldn't have many 'and's and almost no 'or's."라고 합니다. 만약 이게 자연스럽게 되지않는다면 클래스를 하나 이상 만들어야 한다는 얘기가 되겠죠.) 한가지 가능한 지능 분산으로, 여러개의 Queen 오브젝트와 Board 오브젝트 하나를 만드는 경우를 생각해 볼 수 있겠습니다. Queen 오브젝트 갑이 Queen 오브젝트 을에게 물어봅니다. "내가 너를 귀찮게 하고 있니?" --김창준
  • Gnutella-MoreFree . . . . 4 matches
         파일을 선택하고 그 그룹의 결과값을 RelayDownload 함수의 전달인자로 보낸다.
         처럼 DownloadShell에 AddHost함수를 통해 Item의 모든 Host를 다운로드 에 넣는다.
         실제적으로 하나의 Host마다 CGnuDownload 클래스를 갖게 되며 데이타를 받는 소켓이 된다m_StartPos가 받기 시작하는 Chunk의 시작을 나타내며 ReadyFile()에서는 전의 받던 파일이 있는 지 조사후에 File을 연다.
         StartDownload() 함수에서 다운로드를 시작하며 GetStartPos() 를 통해 Chunk가 다운로드가 시작할 m_pChunk->m_StartPos의 위치를 알게 한다.
  • HaskellLanguage . . . . 4 matches
          * 오늘 굉장한 사실 하나를 알아버렸다. Haskell에서 값인줄로 알았던 3도.. 함수였던 것이다... 덜덜덜;; - 임인택
          * (Num t)는 t의 자료형이 Num이라고 알려주는 것이에요. 함수는 화살표가 -> 로 나오네요.^^
         함수를 정의할 때 한 곳에 모아두어야 한다. 따라서 다음은 오류이다.
         연산자 처럼 보이는 녀석들도 함수이다.
  • Java/문서/참조 . . . . 4 matches
         String은 기본 자료형만큼 자주 쓰기 때문에 클래스 임에도 불구하고
          # 참고로 함수라는 말은 자바에서는 맞지 않는다.
          함수는 C에서만 존재 하는것이며 자바나 기타 OOP언어에서는
         안되는 이유는 아까 언급한 바와 같이 클래스는 vector값이기 때문이다.
  • JavaStudy2002/영동-2주차 . . . . 4 matches
          * 상욱이의 지적에 따라 하나의 클래스에서 모든 걸 처리하지 않고 클래스를 여러개로 분리했습니다.
         Class main--메인함수 클래스
  • KIV봉사활동/자료 . . . . 4 matches
         == 멤버십 자료 ==
         [[include(KIV봉사활동/자료/멤버십)]]
         === 멤버십 자료 중 요청 ===
          * ''홍길동의 후예'' - 자막 싱크때문에 멤버쉽꺼도 받아봤으면 함.
  • Linux/RegularExpression . . . . 4 matches
         이외에도 "문자클래스"를 포함하는 [:문자클래스:]의 형태가 있다.
         여기에서 "문자클래스"에는 alpha, blank, cntrl, digit, graph, lower,
         PHP에서는 정규식과 관련하여 다음의 네가지 함수를 제공한다.
  • LoveCalculator/조현태 . . . . 4 matches
          tolower(해당문자를 소문자로 바꿔줌, 소문자면 그대로)함수 또는 toupper(대문자로)를 쓰고 알파벳에서 숫자가 아닌 문자(alpha = alpha - 'a' +1)로 처리 하였다면 대소문자 따로 처리할 필요 없었고, 가독성 또한 좋아지지 않았을까? - [이영호]
          그런데 현태야;;; C++ 클래스 설계 할 때 고생 하겠다... 설계상의 약간의 문제점이 있네. 메인 함수는 최대한 간단히 하고 입력만 받고 문자열을 함수로 넘겨 처리하였으면 더 간단해지지 않았을까?;;; - [이영호]
  • MFC/DeviceContext . . . . 4 matches
         윈도우 운영체제에 의해서 정의된 데이터 구조. 윈도우 운영체제가 장치에 비종속적인 GDI 함수로, 출력 요청을 처리하는 출력장치에 대한 작업으로 해석가능하다. DC에 대한 포인터는 윈도우의 API함수를 호출함으로써 얻을 수 있다.
          SetViewportOrg() API 함수나, CDC::SetViewportOrg()를 이용해서 원점의 위치를 변경할 수 있다.''
  • MFC/Socket . . . . 4 matches
          * 서버를 구현하기 위해서 CSocket을 상속받아서 클래스를 하나 생성한다. CSocket은 MFC에서 제공해주는 클래스
         === 만든 클래스를 사용하는 부분 ===
         ///클라이언트가 접속하는 경우 이벤트가 발생하여 아래 함수가 호출된다.
  • MFCStudy_2002_2 . . . . 4 matches
          * 기본적인 MFC사용법(?), 간단한 클래스함수에 대한 공부
          * 클래스 위저드 사용법에 대한 공부.
          책이 없어서 그런지 좀 정리가 안된 느낌이다. 책을 빨리 사야겠다..함수를 몇개 배운거 같긴 한데 기억이 잘 나질 않으니..기억나는 사람이 이 페이지에 내용을 올려놨음 좋겠다.그리고 앞으로 스터디 할 때 책을 중심으로 차근차근 진도를 나가면 좀 정리가 될것 같기두 한데..-은지 [[BR]]
  • MedusaCppStudy . . . . 4 matches
         - 모든 함수 30 라인 이내
          strlen()함수 이용하시오 --[강희경]
         총 159라인이고 choose함수가 30라인이 넘어서 어거지로 vend함수를 만들었구여..-_-;;
  • MySQL . . . . 4 matches
         === MySQL Password 함수 ===
         MySQL 에서 다른 데이터베이스로 데이터를 옮길 경우 기존 데이터중 문제가 되는 것이 바로 내장함수인 PASSWORD 를 이용해서 암호화를 한 부분이다. 다른 데이터베이스에서 이 데이터를 쓸 방법이 없기 때문이다. 이 경우, 로직 단에서 MySQL의 Password 함수를 대신 구현해줌으로서 해결을 할 순 있다.
         단, 3.23 버전대에서만 동작함. MySQL 이 4.1 이 되면서 PASSWORD 함수의 구현이 바뀌었다.
  • NUnit . . . . 4 matches
          * 어떠한 클래스라도 즉시 Test를 붙일수 있다. (반면 JUnit 은 TestCase 를 상속받아야 하기 때문에, 기존 product소스가 이미 상속 상태라면 Test Fixture가 될수 없다. )
          * 스크린 샷에서 처럼, 함수 이름이 Test 세팅에 종속적이지 않다. (반면 JUnit 은 reflection으로 Test 메소드들을 찾아내므로, Test의 이름들이 testXXX 와 같은 형태여야 한다.)
          * Java 1.5 에 메타 테그가 추가되면 NUnit 방식의 TestCase 버전이 나올것 같다. 일단 이름의 자유로움과, 어떠한 클래스라도 Test가 될수 있다는 점이 좋왔다. 하지만, TestFixture 를 붙여주지 않고도, 목표한 클래스의 Test 들을 실행할 수 있는 방식이면 어떨까 생각해 본다. --NeoCoin
  • NamedPipe . . . . 4 matches
         VOID InstanceThread(LPVOID); // 쓰레드 함수
          // 쓰래드 함수를 생성한다.
         || {{{~cpp CallNamedPipe}}} || 메세지 형식의 Named Pipe를 Connect할 때 쓰이는 함수 ||
         || {{{~cpp ConnectNamedPipe}}} || Named Pipe 에 Connect할 때 쓰이는 함수||
  • ObjectOrientedDatabaseManagementSystem . . . . 4 matches
         OODBMS[오오디비엠에스]는 객체로서의 모델링과 데이터 생성을 지원하는 DBMS이다. 여기에는 객체들의 클래스를 위한 지원의 일부 종류와, 클래스 특질의 상속, 그리고 서브클래스와 그 객체들에 의한 메쏘드 등을 포함한다. OODBMS의 구성요소가 무엇인지에 관해 광범위하게 합의를 이룬 표준안은 아직 없으며, OODBMS 제품들은 아직 초기에 머물러 있다고 여겨진다. 그 사이에 관계형 데이터베이스에 객체지향형 데이터베이스 개념이 부가된 ORDBMS 제품이 더욱 일반적으로 시장에 출시되었다. 객체지향형 데이터베이스 인터페이스 표준은 산업계의 그룹인 ODMG (Object Data Management Group)에 의해 개발되고 있다. OMG는 네트웍 내에서 시스템들간 객체지향형 데이터 중개 인터페이스를 표준화하였다.
         객체지향형 데이터베이스 시스템은 두 개의 조건을 만족시켜야만 한다 : 그것은 DBMS이어야 하며, 또한 객체지향형 시스템이어야 한다. 즉, 가능한 범위까지 OODBMS는 객체지향형 프로그래밍 언어의 현재 작업과 함께 일관되어야만 한다. 첫 번째 기준은 영속성, 2차 저장관리, 동시성, 회복, 그리고 특별한 편의 등 다섯 개의 특질로 해석된다. 두 번째 것은 복잡한 객체들, 객체 동일성, 캡슐화, 형 또는 클래스, 상속, 지연 바인딩과 결합된 오버라이딩, 확장성과 계산 결과의 완성도 등 여덟 개의 특질로 해석된다.
  • OurMajorLangIsCAndCPlusPlus/ctype.h . . . . 4 matches
         == 함수 (FUNCTIONS) ==
         || 함수명(Ascii) || 내용 ||
         || 함수명 (Uncode) || 내용 ||
         || 함수명 || 내용 ||
  • OurMajorLangIsCAndCPlusPlus/print . . . . 4 matches
         printf와 유사한 print 함수 만들기
         함수 원형
         printf, scanf 계열의 함수 사용 금지
         배열의 경우 배열 포인터와 배열의 길이를 전달인자로 넘긴다.
  • Plugin/Chrome/네이버사전 . . . . 4 matches
          * window.open함수를 이용하여 body를 '''더블''' 클릭하면 새로운 팝업창을 띄운다.
          * 위의 na-open_window는 임의로 만든 함수긴한데 status_bar나 기타 스크롤이 가능하지 않은 popup을 만들고 있다. 0은 false니까.
          * javascript의 다른 예제를 확인하니 document.body.ondblclick = 함수명 을 작성하면 똑같이 작동되는것을 확인했다.
          * inline script를 cross script attack을 방지하기 위해 html과 contents를 분리 시킨다고 써있다. 이 규정에 따르면 inline으로 작성되어서 돌아가는 javascript는 모두 .js파일로 빼서 만들어야한다. {{{ <div OnClick="func()"> }}}와 같은 html 태그안의 inline 이벤트 attach도 안되기 때문에 document의 쿼리를 날리던가 element를 찾아서 document.addEventListener 함수를 통해 event를 받아 function이 연결되게 해야한다. 아 이거 힘드네. 라는 생각이 들었다.
  • PowerOfCryptography/허아영 . . . . 4 matches
         난 이 문제 보는 순간 sqrt함수 바로 쓰려고 했는데 -_-; 어쨌든 아영아 C++의 오버로딩으로 두개를 합쳐보는건 어떨까? - [이영호]
          sqrt함수.처음들어보는 ㅜㅡ 하핫,, C++언어 아직 몰라요 ^^;;;; 가르쳐 주세요! --아영
          제곱근 구하는 함수였군요 ! 연산자가 없어서 당황했었는데,,있었구나.ㅡ
          대단해 공부열심히 하는구나 난그런함수 모르는대_
  • ProgrammingLanguageClass/2006/Report3 . . . . 4 matches
         thunks 는 두가지 의미로 해석됩니다. 첫번째, 함수형 언어에서 말하는 지연형 계산 두번째, 호환성의 이유로 서로다른 데이터형 간의 매핑을 행하는 행위
         이번 숙제에서 구현하려는 것은 첫번째의 의미로 지연형 계산(delayed computation)을 의미합니다. call-by-name, call-by-need를 통해 함수에게 넘어오는 일련의 매개변수를 thunk라는 이름으로 부릅니다. 간단히 말해 thunk라는 것은 실행시에 계산되어 변수의 값이 얻어진다는 의미입니다. (이는 기존의 함수에서 파라메터 패싱에서 Call 시에 변수에 바인딩되는 것과는 다릅니다.) 이런 기능이 최초로 구현된 Algol60입니다.
         음 잠깐 하면서 생각한건데.... 이 숙제 정말로 구리다. -_- 내가 이렇게 재미없는 숙제를 하게된건 파일구조때 binary 가지고 장난친 이후 처음인듯하다. 문자열 장난할꺼면 펄로하게 해주던지... C 문자열 함수 가지고 놀려니... 정말로 구리다라는 생각뿐~ - [eternalbleu]
  • ProgrammingLanguageClass/Report2002_1 . . . . 4 matches
          * 각 파싱(parsing) 함수는 리턴하기 직전에 해당 non-terminal이 검색되었음을 알리는 메시지를 출력하여야 한다.
          * 어휘분석기(lexical analyzer)의 소스코드는 정수 변수 next_token, 문자열 변수 token_string, 함수 lexical()을 포함하여야 한다. 함수 lexical()은 입력 스트림을 분석하여 하나의 lexeme을 찾아낸 뒤, 그것의 token type을 next_token에 대입하고, lexeme 문자열을 token_string에 저장하는 함수이다.
  • ProjectAR/Design . . . . 4 matches
          * DX의 '''CMyApp'''는 '''View'''가 될테고, '''Doc'''가 될 클래스를 하나 추가해주자.
          그런데 왜 저렇게 복잡하게 상속을 받아야 하는걸까, CARMonster클래스가 모든걸 갖고 있어도 충분히 처리가 가능할 것같은데 --[선호]
          그러면 늘어나는 클래스의 관리는 어떻게 하면 쉽게 할 수 있을까..??
          나중에 DLL로 바꾸면 가시적인 클래스 수는 많이 줄어들겠지
  • ProjectAR/회의/20030525 . . . . 4 matches
          * 함수 이름은 MFC를 따른다.
          * 멤버 변수 앞에는 m_ , 포인터는 m_pComponent 이런식으로 간다. 그 외에 타입 정보는 넣지 않는다.
          * 인벤토리는 이스 스타일로 간다. 그냥 주인공이 CARItem*형 포인터의 배열 또는 리스트를 가지고 있으면 된다.
  • ProjectSemiPhotoshop/SpikeSolution . . . . 4 matches
         === 이미지 클래스 전체 모습 ===
          DIB와 관련된 전역 함수
          클립보드를 위한 전역 함수
          * 최소한의 클래스와 메소드를 가진다.
  • PyIde/Exploration . . . . 4 matches
         Design 을 할때 오버하는 성향이 있는 것 같다. IListener 가 있으면 DIP를 지키는 것이기도 하고, 기존 TestResult 등의 클래스들을 수정하지 않으면서 Listener 들만 추가하는 방식으로 재사용가능하니까 OCP 상으로도 좋겠지만. 과연 당장 필요한 것일까? 그냥 TestResult 를 모델로 들고 있고 View 클래스 하나 더 있는 것으로 문제가 있을까?
         unittest 모듈을 프린트하여 Code 분석을 했다. 이전에 cgi 로 test runner 돌아가게끔 만들때 구경을 해서 그런지 별로 어렵지 않았다. (조금 리팩토링이 필요해보기는 코드같긴 하지만.. JUnit 의 경우 Assert 가 따로 클래스로 빠져있는데 PyUnit 의 경우 TestCase 에 전부 implementation 되어서 덩치가 약간 더 크다. 뭐, 별 문제될 부분은 아니긴 하다.
         약간만 Refactoring 해서 쓰면 될듯. Runner abstract class 추출하고, TestResult 상속받은 클래스 만들고,. Test Loading 은 TestLoader 그대로 쓰면 될것 같다.
  • PythonForStatement . . . . 4 matches
         비슷한 것을 찾자면 C++의 배열보다는 C++의 string 클래스, Java의 String 클래스와 비슷하다는 점을 알 수 있어. -- [Leonardong]
         음수가 아닌수로 제한되어 있으며 순서가 매겨진 집합. 내장함수인 len()는 시퀀스의 아이템 갯수를 반환한다. 시퀀스의 길이라 n이면, 인덱스는 0..n-1 까지의 범위를 가진다. 시퀀스의 아이템 i는 a[i]로 선택된다.
         왜 C++에 안되느냐면, C++의 제어문이 C문법에 종속되어 있고, C에서는 배열과 같이 주소를 통한 인덱스로 접근하는 형들이 종료 인덱스에 대한 정보가 없어서 구현이 불가능합니다. 추상화 시켜 C++에서는 [STL]에 for_each(..) 라는 함수로 비슷한 것이 구현되어 있기는 합니다.
  • RUR-PLE/Newspaper . . . . 4 matches
         = RUR-PLE/Newspaper(함수화 전) =
         = RUR-PLE/Newspaper(함수화 후) =
         = RUR-PLE/Newspaper(함수화 후, 함수 반복제거) =
  • RandomFunction . . . . 4 matches
         랜덤함수의 사용법입니다.
         #include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
          int x = rand(); // rand()함수는 랜덤한 숫자를 리턴하는 함수입니다.
  • RandomWalk2 . . . . 4 matches
         만약 자신이 작성한 코드를 위키에 올리고 싶다면 {{{RandomWalk2/아무개}}} 패턴의 페이지 이름을 만들고 거기에 코드를 넣으면 된다. 이 때, 변경사항을 하나씩 완료함에 따라, 코드의 어디를 어떻게 바꿨는지(예컨대, 새로 클래스를 하나 만들어 붙이고, 기존 클래스에서 어떤 메쏘드를 끌어온 뒤에 다른 클래스가 새 클래스를 상속하게 했다든지 등) 그 변천 과정과 자신의 사고 과정을 요약해서 함께 적어주면 자신은 물론 남에게도 많은 도움이 될 것이다. 또한, 변경사항을 하나 완료하는 데 걸린 시간을 함께 리포팅하면 한가지 척도가 될 수 있겠다.
  • STL . . . . 4 matches
          * [http://oopsla.snu.ac.kr/~sjjung/stl/ptr_0001.htm 컨테이너에 포인터 저장하기(문제점과 해결책)]
         "[STL] 컨테이너는 포인터를 염두에 둬두고 설계된 것이 아니라, 객체를 담을 목적으로 설계된 자료 구조이다." 이 말을 너무 늦게 봤네요ㅠ_ㅠ 기본 데이터 타입 이외에 사용자 정의 데이터 타입(분류_[class])의 포인터를 사용하기 위해서는 상당한 노력이 필요 할것 같습니다. 혹시 쉬운 방법은 없나요? - [이승한]
          "사용자 정의 데이터 타입의 포인터를 사용하기 위해서는 상당한 노력이 필요할 것 같습니다" - 어떤 뜻인지? 힘들었던 예를 코드로 써주면 더 명확할 듯.~ --[1002]
  • Spring/탐험스터디/wiki만들기 . . . . 4 matches
          * ''CGLIB는 코드 생성 라이브러리로서(Code Generator Library) 런타임에 동적으로 자바 클래스의 프록시를 생성해주는 기능을 제공(펌)'' 이라고 한다.
          * TODO : write/delete 등 함수 단위로 security 설정 필요함
          * 컨트롤러 함수에 인자를 다르게 해서 OverLoading하려 했으나 ResuestMapping이 같아서 Spring이 Ambiguous Mapping Exception을 발생시켰다.
          * 예를들어 ''@RequestMapping(value = "/helloworld", method = RequestMethod.GET)''와 ''@RequestMapping(value = "/helloworld", method = RequestMethod.GET, params="param=param")''은 다르다. 각각 다른 함수에 mapping될 수 있다.
  • Trace . . . . 4 matches
         MFC 에서 제공하는 {{{~cpp TRACE }}} 매크로의 기능을 VC 의 다른 프로젝트에서도 사용할 수 있다. 단, 여기서는 매크로가 아니라 함수인것을 유념하자.
         ( {{{~cpp TRACE}}} 매크로가 내부적으로 함수 호출을 하는것 같기는 한데 생각해보면 {{{~cpp TRACE}}} 매크로보다 우리가 정의한 함수를 호출하는게 조금더 오버헤드가 있을것 같다 )
         = 함수 body =
  • WeightsAndMeasures/신재동 . . . . 4 matches
         sort()에 비교 함수('''turtlesCompare''') 넣는데 은근히 힘들었음. 처음에는 C++의 STL에서 vector에 비교 함수 넣는 것과 같으리라고 생각하고 비교 함수를 만들었는데 안되서 확인해보니 파이썬의 리스트에서는 결과를 '''{-1, 0, 1}'''로 해야지 제대로 돌아간다는 것을 알았음. --재동
         클래스를 사용한다면 스스로 어떻게 정렬될지 아는 놈으로 만드는 것도 좋겠다.
  • django/AggregateFunction . . . . 4 matches
         Django에서 기본적으로 count 함수를 통해 레코드 개수를 셀 수 있다.
         Django에서 기본적으로 제공하는 함수는 없다. 대신 order_by를 이용해서 최상위 레코드만 뽑는 방법을 사용할 수 있다.
         Django에서 기본적으로 제공하는 함수는 없다. 원하는 레코드 집합을 얻어온 다음, python을 이용해서 구하는 방법을 사용할 수 있다.
         다음은 위험 결과 손실액 합계를 얻어오는 함수이다.
  • randomwalk/홍선 . . . . 4 matches
          void Input(); // 바퀴벌레의 시작위치 입력함수
          void show(); // 결과값 출력 함수
         void Roach :: Input() // 바퀴벌레의 시작위치 입력함수
          Roach Hong; // Hong 이라는 Roach 클래스를 생성
  • 가독성 . . . . 4 matches
         이 글을 쓰고 저 문제에 대한 이의 제기가 들어올줄 예상은 하고 있었습니다. 그에 따른 제 변명은 이렇습니다. 여러 언어의 특성상 언어마다의 코딩 스타일은 엄연히 존재합니다. C언어의 특성에 따라 하나의 함수는 한 화면에 모두 출력되게 하는 것이 중요합니다. (물론 요즘과 같은 큰 터미널에서는 문제가 되지 않겠습니다만,..) 때문에 코드의 가독성을 높히며 많은 코드들을 짜는 것은 불가분의 관계라고도 할 수 있겠죠.(함수를 붙여쓰면 코드들은 많이 들어가나 가독성이 매우 떨어지죠.) 하지만 C언어에서 저것과 같은 방식의 코드는 코드의 라인만 늘리는 결과를 초래하게 됩니다. 예를 들어 24라인만 쓸 수 있는데 for문과 while문의 갯수가 4개라고 하면 4줄을 낭비하는 꼴이 됩니다. 즉, for문과 while문의 가독성을 위해 전체적인 함수 가독성을 떨어뜨리게 되는 것이죠. (또한 for문과 while문의 {를 아래로 내리는 것과 위로 올리는 것의 차이점은 얼마되지 않습니다.) 제가 강조한 것은 이 전체적인 모듈의 가독성을 뜻한 것입니다. (딴지를 걸자면 80x24 화면에 저러한 코딩 방식을 사용하는 것은 죽음을 자초하는 길일것입니다. 토발즈 또한 강조한 것이기도 하구요. :) ) - 이영호
         그래서 추측을 했었는데, 자신이 쓰는 도구에 따라 같은 코드도 가독성에 영향을 받을 수 있겠다는 생각을 해봅니다. VI 등의 editor 들로 코드를 보는 분들이라면 아마 일반 문서처럼 주욱 있는 코드들이 navigation 하기 편합니다. (아마 jkl; 로 돌아다니거나 ctrl+n 으로 page 단위로 이동하시는 등) 이러한 경우 OO 코드를 분석하려면 이화일 저화일 에디터에 띄워야 하는 화일들이 많아지고, 이동하기 불편하게 됩니다. (물론 ctags 를 쓰는 사람들은 또 코드 분석법이 다르겠죠) 하지만 Eclipse 를 쓰는 사람이라면 코드 분석시 outliner 와 caller & callee 를 써서 코드를 분석하고 navigation 할 겁니다. 이런 분들의 경우 클래스들과 메소드들이 잘게 나누어져 있어도 차라리 메소드의 의미들이 잘 분리되어있는게 분석하기 좋죠.
  • 김수경 . . . . 4 matches
          * 멤버 : 윤종하, 박정근, 서희석, 홍민석
          * 초기멤버 : 이재성, 최가희, 채준병, 이호일, 이성준, 박준호.
          * 최종멤버 : 이성준, 박준호.
          * 초기멤버(송수빈, 차재훈) + 박한기
  • 김희성 . . . . 4 matches
          타이핑 중 상대방 입력이 날아오면 전송 안한 타이핑 분량이 보이지 않는 상태로 버퍼에 남는 버그가 있습니다. 입력 방식을 scanf와 같은 문자열 입력함수가 아닌 문자 입력 함수로 바꾸어야할듯 합니다.
          recv함수는 send 횟수만큼 끊어 읽지 못한다는 것을 간과하였습니다. 로그인 과정에서 send가 recv보다 빨리 작동하여 스택에 쌓인 후 하나의 메세지처럼 입력되는 것을 방지하기 위해 수신 확인 신호를 받도록 수정하였습니다.
          명령어 기능이 추가되었습니다. (귓속말, 명령어 목록 보기, 접속 멤버 보기)
  • 데블스캠프2003/ToyProblems/Random . . . . 4 matches
         랜덤함수의 사용법입니다.
         #include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
          int x = rand(); // rand()함수는 랜덤한 숫자를 리턴하는 함수입니다.
  • 데블스캠프2006/월요일 . . . . 4 matches
         문법,함수,MSDN,SVN,SSH,파일입출력
         || 문법 || 함수 || MSDN || SVN,SSH || 표준입출력 || 계정 및 따로 공부 ㅋㅋ ||
         ||pm 10:00~12:00 || 함수 || 김정현 (01) ||
         [데블스캠프2006/월요일/함수]
  • 데블스캠프2009/수요일후기 . . . . 4 matches
          * '''서민관''' - 수요일 수업에서 제일 마음에 들었던 부분입니다. 이클립스를 써 본 것도 좋았고, 무엇보다 JUnit test는 정말 마음에 드네요. 앞으로 갈수록 프로그램의 크기가 커질텐데 이클립스를 통한 svn 사용이나 JUnit test나 둘 다 팀 프로젝트용으로는 정말 좋은 기능이라고 생각합니다. 정말 뭐라고 더 칭찬을 해야 할 지 말이 안 나올 정도로 마음에 들었어요. 한 방에 제대로 프로그램을 못 짜는 저한테는 메인 함수 없이도 버그 수정이 가능하다는 건 정말 고마운 기능이죠.
          * [송지원] - 사실 너무 아쉬웠다. JUnitTest를 위해 예로 제시한 계산기 클래스함수 하나 정도밖에 테스트 해볼 수 없는 이상한 설계의 클래스였다(너무 OOP 다음수업이라 캡슐화에만 신경을 썼던듯). 한 마디로 Java도, JUnit도 맛보기만 해준 꼴이 된것 같다. 하지만 '''JUnit은 확실히 강한 라이브러리다'''. 내가 몸소 느끼고 자발적으로 세미나한 이유도 그렇다. 내 세미나는 즈질이였지만 많은 1,2학년 학우들이 Java로 개발을 진행할 때 도움이 되었으면 한다.
  • 데블스캠프2009/월요일후기 . . . . 4 matches
          * '''박준호''' - 새로운 프로그래밍언어를 배워봐서 재미있었다. 로보랩을 할때와 비슷한 느낌이라 더 좋았고 만약 C 언어의 함수를 다 모르고 그런 상태라면 이런 사람에게 친근한 고급언어가 더욱 쉽고 유용한거 같다.
          * [김준석] - 과거 06년도 데블스 캠프때 서버 할당받아서 svn잠깐 써보고 그다음에 전혀 써보지않았던 svn... 다시쓰기가 난감 할정도는 아니었지만 까는거에서 에러나면 어떻게 하는거야? 뭐여튼 nForge로 할당받아서 프로젝트 하나하나 올리면 되겠는데 문제는 이게 제로페이지 공용이라서 과연 학생들이 학업중 팀프로젝트때도 쓸려나.. 사용법을 가르쳐주는것 만으로 충분하긴 한데.. Zeropage내의 프로젝트는 얼마 되지 않는데;; 외부프로젝트라도.. 몇개나 올라올지는 모르겠지만 일단봐야지. 한 4~5개만 나와도 엄청난 프로젝트 갯수를 채우는 거겠군.. 프로젝트 진행중 중요한건 여러명의 개발자가 사용한 프로그램이기에 주석과 구조 그리고 변수건 함수건간에 서로 알아보기 쉽게 암묵적인 규약이라도 있어야된다는거 하긴 혼자할때는 그런거 필요없지만 SVN을 통해 올리는 프로젝트는 그렇게 해야 참고하고 구경하러온 학우들에게 도움이 될테니까. 특별히 코드레이스는 엄청나게 신경쓰면서 열심히 해봤는데 마지막에 올릴때 그것의 미인증이 인터넷을 막는 바람에 못올린것에 전산센터는 좀 반성해야되! 그리고 아쉬운점은 코드레이스는 좀더 늦게하고 제로페이지에 참가한 학우들에게 알고리즘이나 객체, 구조 함수에대해서 좀더 알려주고 조금 더 생각할 문제를 풀었으면 재밌었을텐데.. 난 printf()만 나오는 그리는 문제에는 잼병이란 말이다! 그렇다고 머리를 잘쓰는건 아니지만. 뭐.. 그렇듯 코드로 짜는건 빠른 손가락만 움직이면 되지만 푸는건 머리라는 사실은 변함이 없다. 코드레이스때 특정함수를 쓰게해서 DBMS나 라이브러리 북을 찾아보는 연습하는것도 좋았을텐데... 뒤에서 원그리고 있는데 앞에서 로보코드하고있을때는 안습. 끝나고 포트2 강추.
  • 레밍즈프로젝트/프로토타입/MFC더블버퍼링 . . . . 4 matches
         == 더블버퍼링 클래스 ==
         OnDraw의 경우 도큐먼트 클래스와 연관 될 수 있다.
         클래스 내부에는 윈도우 핸들이 없기 때문에 GetClientRect를 사용하지 못한다. 따라서 전달인자로 CRect가 전달된다.
         getMemDC()를 통해서 생성자를 통해 확보한 메모리DC 포인터를 전달받아 그림을 그린다.
  • 문자반대출력/문보창 . . . . 4 matches
         음 만약에 한글과 같은 확장문자가 담겼다면 process_wchar() 함수에서 약간의 꼼수를 부린다. 가상의 예(실제로 이렇게 되지는 않지만, 원리는 같음)를 들어보자. "가나" 라는 문자열을 ver1과 같은 통상의 프로그램으로 뒤집으면 "나가"와 같이 프로그래머가 원했던 결과가 나오는 것이 아니고 "ㅏㄴㅏㄱ"가 나온다. 그렇다면 확장문자를 판단해서 문자열을 뒤집기 전에 "가나"라는 문자열을 "ㅏㄱㅏㄴ" 이렇게 만들어 놓는다면 기존 ver1의 프로세스를 전혀 바꾸지 않고도, process_wchar()만을 추가하는 것으로 원했던 기능을 모두 수행하게 된다.
          reverse(str.begin(), str.end()); // 문자열을 거꾸로 해주는 STL 함수
          reverse(str.begin(), str.end()); // 문자열을 거꾸로 해주는 STL 함수
         // 확장문자를 위한 전처리 함수
  • 상협/인공지능/오목 . . . . 4 matches
         || 번호 || 및 방어(공격 방어가 같은 함수) || 구현 유무 || 간략한 설명 ||
         || 1 || 4->5 개 만드는거(공격, 방어) || 0 || 그냥 level2라는 함수로 만듦 ||
          * 재활용 : 원래 두지 않은 곳이지만 가상으로 돌을 두었다고 가정하면서 이것 저것 검사하기(새로운 함수 만들 필요 없이 이전에 만들었던 함수를 재활할수 있음)
  • 새싹C스터디2005/선생님페이지 . . . . 4 matches
          * 함수
          * 포인터
         여러분들보다 조금은 세미나 경험이 많은 사람이기에 한가지 이야기만 드리겠습니다. 세미나를 통해 무언가를 설명할 때 정의(definition)에 대해서 명확하게 알려주도록 노력해 보세요. 여러분이 세미나를 한 후에 신입생들에게 "변수의 정의가 무엇이냐?", "함수의 정의가 무엇이냐?" 와 같은 질문을 한다면 신입생들이 대답을 할 수 있을까요? 혹은 여러분들은 이러한 질문에 명쾌하게 대답을 할 수 있습니까? 어떤 새로운 것을 배울 때 가장 중요한 것은 그것이 어디에 쓰이는 것인지, 그것이 어떻게 쓰는 것인지와 같은 것들이 아니라 그것이 무엇인지를 아는 것입니다. 무엇인지 확실하게 알아야 그 다음을 이해하는데에도 보다 쉽지 않을까요?
         이제 포인터에 대해서 다룰 예정인데. 저는 선생님들도 이해가 좀 부족하다고 생각합니다.(저만 그런가요ㅋ?) 다들 공부해 명확히 이해해서 잘 지도해주시고 스스로 발전도 하시길 바랍니다. -[강희경]
  • 새싹교실/2011/AmazingC . . . . 4 matches
         ==== part2. Hello World 출력하기(printf함수의 사용과 코드 분석하기) ====
          * printf함수를 사용하여 문자열을 출력하는 방법에 대해 알아보았고 컴파일러가 main 함수를 분석하는 모습을 따라서 전체 코드를 분석했다.
          * 따라서 scanf("%d",&number);에서 &는 number가 메모리에서 차지하고 있는 공간의 주소를 반환한다.(후에 포인터 배울때 중요한 개념)
  • 새싹교실/2011/무전취식/레벨9 . . . . 4 matches
          * Rand함수의 쓰임, seed값을 초기화시켜줘야 제대로된 rand가 나옵니다. 복습합시다.
          * 후기가 날아가서 갑자기 의욕이 팍... 앞으로는 저장하고 적어야겠습니다. 이런일이. 역대 Ice Breaking중 가장 길었는데!!! 이미 수업 진도는 다 나아가서.. 이제 좌우를 돌아볼차례입니다. 알고리즘도 배우고 함수 쓰임도 배우고 코딩도 손에 익히고. 이번 시간에는 진영이에게 코딩을 맞겼는데 생각보다(?) 정말 잘했습니다. 가르치고 싶은건 이제 생각한 내용을 코드로 바꾸는것입니다. 다음시간에는 그것에 대해 한번 생각해서 진도에 적용시켜봐야겠습니다. 그리고 자료구조를 한번 알려줘야겠어요. 숙제는 잘들 해가죠? - [김준석]
          * 흐음.. 이번주는 정말 기분이 좋아^^ 후기를 이렇게 빨리써주다니. 이번 시간에는 나조차 생각못한 재밌는 시간이었나? 여튼.. 다음시간에도 파일 입출력 복습합니다. while문이 4번돌아가는건 fget함수 특성상 입력에서 \n을 만나면 거기서 끊어주기 때문이지=ㅂ=! 함수 특성에 대해서는 좀더 알려드리겠습니다. 가르쳐야될게 많아졌네. 그리고 역시 젤 좋은건 먹을것에 대한 유혹인가봐. ㅋㅋㅋ 아이셔 잔뜩 먹이면.. 잠 안올려나. 음.. 실험을 해봐야겠어! 여튼 진영이도 이렇게 후기 올리느라 새벽에 수고가 많아. 하번 훑어봐주고 과제 화이팅!! - [김준석]
  • 새싹교실/2012/새싹교실강사교육/4주차 . . . . 4 matches
         - 변수, 제어문, 함수, 배열, 포인터, 구조체 복습 복습 + File I/O -
          FILE *ftr = fopen("C:\\입출력함수.txt","w");
          ftr2 = fopen("C:\\입출력함수.txt","r");
  • 새싹교실/2012/절반/중간고사후 . . . . 4 matches
         함수 사용법
         포인터
         재귀함수 문법 정확히 쓰기
          * 포인터와 배열의 관계
  • 새싹교실/2012/햇반 . . . . 4 matches
         3. 진도 - 함수
         ㄱ.함수의 구조
         ㄴ.함수의 사용방법
         ㄷ.예제 - Add, Power함수
  • 새싹교실/2013/라이히스아우토반/1회차 . . . . 4 matches
          * printf, scanf 복습하고, 그 이외의 stdio.h에 있는 입출력 함수들을 소개할 겁니다.
          * printf, scanf 복습하고, 그 이외의 stdio.h에 있는 입출력 함수들을 소개할 겁니다.
          *-> 변수개념 -> 함수 이렇게 된듯...
          1. 함수에 return이 왜 들어가는지 설명을 들었다.
  • 서로간의 참조 . . . . 4 matches
         == 프레임 윈도우 클래스에서 도큐먼트/ 뷰 참조 ==
          CFrameWnd::GetActiveDocument 함수
         == 뷰 클래스에서 프레임 / 도큐먼트 참조 ==
         == 도큐먼트 클래스에서 뷰 / 프레임 참조 ==
  • 손동일/TelephoneBook . . . . 4 matches
          void check(); // 검색 항목을 선택하는 함수
          int mnreturn(); // menu_num 리턴해주는 함수
         void TelephoneBook::check() // 검색 항목을 선택하는 함수
         포인터를 이용할 수 있는 방법일 듯..
  • 수/구구단출력 . . . . 4 matches
         변수명은 가능하면 a,b 나 i,j 같이 이름만 보고 무슨 의미인지 알기 힘들게 짓기 보다는 조금 더 길어지더라도 이름만 보고 이게 무슨 역할을 하는 변수명이구나 하고 알수 있게 짓는 버릇을 들이는게 좋다. 주석이 필요 없을 정도로 변수명 함수명만 보고 이게 무슨 일을 하는 변수, 함수 이다라고 알수 있게 하면 더 더욱 좋다. - [상협]
          상협이형의 말을 정리하자면 함수나 변수명을 잘 지으라는거지 그 변수가 무엇을 나타내는지, 함수가 어떤 기능을 하는지 잘 나타내라는거야. 음가(beveragePrice)처럼ㅋ-[강희경]
  • 스네이크바이트 . . . . 4 matches
         윈도우 프로그래밍에 필요한 약 300여 개의 클래스를 계층구조적으로 구현해 놓은 클래스 라이브러리이다.
         대형 프로그램을 작성할 때, 모든 것을 한꺼번에 생각해서 만들기는 너무 복잡하다. 그래서 작은 단위로 나누어서 만든다. 객체 지향 프로그래밍에서 그 단위가 바로 '클래스'이다.
         클래스와 객체의 관계는 보통 '붕어빵'과 '붕어빵틀'의 관계로 설명되어진다.
  • 실시간멀티플레이어게임프로젝트/첫주차소스3 . . . . 4 matches
         Upload:test_4.zip -- 정훈, 전에 휘동이랑 얘기했었던 스캔함수 만들었어요.. :) game.py에 추가하지는 않고요 그냥 scan.py만들었어요..
         Upload:test_4b.zip --휘동 (로그인 화면 깔끔하게, 플레이어 정보를 클래스로, 플레이어 정보 넘겨주기)
         doIt(cmd) - 명령어 실행 분기 함수
         showState() - 플레이어 상태 출력 함수
  • 이영호/지뢰찾기 . . . . 4 matches
         --------------------------------지뢰 생성 함수 시작--------------------------------
         // 지뢰 생성 함수
         // srand(GetTickCount()); 를 이 함수 밖에서 수행한다.
         --------------------------------지뢰 생성 함수 끝--------------------------------
  • 이차함수그리기/조현태 . . . . 4 matches
          //반올림하는 함수
          //이번에 그림 함수
          cout << "2차함수 출력 프로그램.";
         [LittleAOI] [이차함수그리기]
  • 정규표현식/스터디/메타문자사용하기 . . . . 4 matches
         자주쓰는 문자 집합들은 특수한 메타 문자로 대신하여 찾기도 한다. 이런 메타 문자들을 문자 클래스(classes of characters)라고 부른다. {{{[0-9]}}} = {{{[0123456789]}}} 와 같은걸 알것이다. 이것을 {{{[0-9]}}} 보다 더 편한게 찾으려면 '\d'로 찾을수 있고 제외하고 찾기는 '\D'로 {{{[^0-9]}}}를 대신할수 있다.
          * 자바스크립트는 포직스 문자 클래스를 지원하지 않는다.
          * 문자와 문자 집합으로 찾는 기본 내용은 2장과 3장에서 모두 배웠고, 이 장에서는 특정 문자나 전체 집합 혹은 문자 클래스와 일치하는 메타 문자를 소개했다. 이렇게 메타 문자와 포직스 클래스는 정규 표현식 패턴을 단순하게 만든다.
  • 졸업논문/본론 . . . . 4 matches
         기본적으로 지원 되는 레코드 삽입, 삭제, 변경은 자동으로 사용자 화면까지 만들어주는 장점을 가진다. 대부분 웹 애플리케이션이 레코드를 한 건씩 입력하는 인터페이스를 가지기 때문에, 개발 전반부에 걸친 데이터 삽입, 삭제, 변경을 자동화할수 있기 때문이다. 특히 삽입, 변경은 저장이란 단일 개념으로 보고 save메소드로 추상화하였다. 또한 삭제는 관련된 레코드를 함께 지워주는 기능까지 제공한다. 이러한 기능은 Model클래스에 정의된 데이터 타입에 따라 자동으로 이루어진다. 따라서 삽입, 삭제, 변경 SQL문을 실행하는 인터페이스에 많은 노력을 기울이지 않고 기민하게 전체 시스템을 설계함에 집중할 수 있다.
         레코드를 검색할 때는 기본적으로 간단한 질의를 처리할 수 있는 함수들을 제공한다. 앞서 살펴본 바와 같이 직접 관계를 가지는 테이블 사이에 조인 연산은 Model클래스의 메소드를 이용해서 추상화되어 있다. 하지만 그 밖인 경우에는 직접 SQL문을 작성하여 데이터를 얻어와야 하기 때문에 django를 사용하더라도 큰 이점이 없다. 또한 추상화된 Model클래스의 메소드는 기본적으로 모든 레코드 속성을 읽어오기 때문에 시간, 공간 측면에서 비효율적일 수 있다. 마지막으로 SQL의 aggregate function등을 대부분 추상화하지 않았기 때문에, 이 역시 SQL문을 작성해야 하는 번거로움이 있다.
  • 프로그램내에서의주석 . . . . 4 matches
         약간 변명이라면, 개인적 경험에서는 주석이 달린 코드는 주석에 시선이 먼저가고, 주석이 없는 코드에는 함수 프로토타입에 시선이 먼저간다라는 것. 하지만, 의도가 전해지지 않았다면 역시 뭐 무의미한것이겠지. --석천
         자네의 경우는 주석이 자네의 생각과정이고, 그 다음은 코드를 읽는 사람의 관점인 건데, 프로그램을 이해하기 위해서 그 사람은 어떤 과정을 거칠까? 경험이 있는 사람이야 무엇을 해야 할 지 아니까 abstract 한 클래스 이름이나 메소드들 이름만 봐도 잘 이해를 하지만, 나는 다른 사람들이 실제 코드 구현부분도 읽기를 바랬거든. (소켓에서 Read 부분 관련 블럭킹 방지를 위한 스레드의 이용방법을 모르고, Swing tree 이용법 모르는 사람에겐 더더욱. 해당 부분에 대해선 Pair 중 설명을 하긴 했으니)
         내가 Comment 와 JavaDoc 둘을 비슷한 대상으로 두고 쓴게 잘못인듯 하다. 두개는 좀 구분할 필요가 있을 것 같다는 생각이 들어서다. 내부 코드 알고리즘 진행을 설명하기 위해서는 다는 주석을 comment로, 해당 구성 클래스들의 interface를 서술하는것을 JavaDoc으로 구분하려나. 이 경우라면 JavaDoc 과 Class Diagram 이 거의 비슷한 역할을 하겠지. (Class Diagram 이 그냥 Conceptual Model 정도라면 또 이야기가 달라지겠지만)
          그리고, JDK 와 Application 의 소스는 그 성격이 다르다고 생각해서. JDK 의 소스 분석이란 JDK의 클래스들을 읽고 그 interface를 적극적으로 이용하기 위해 하는 것이기에 JavaDoc 의 위력은 절대적이다. 하지만, Application 의 소스 분석이라 한다면 실질적인 implementation 을 볼것이라 생각하거든. 어떤 것이 'Information' 이냐에 대해서 바라보는 관점의 차이가 있겠지. 해당 메소드가 library처럼 느껴질때는 해당 코드가 일종의 아키텍쳐적인 부분이 될 때가 아닐까. 즉, Server/Client 에서의 Socket Connection 부분이라던지, DB 에서의 DB Connection 을 얻어오는 부분은 다른 코드들이 쌓아 올라가는게 기반이 되는 부분이니까. Application 영역이 되는 부분과 library 영역이 되는 부분이 구분되려면 또 쉽진 않겠지만.
  • 함수포인터 . . . . 4 matches
         [http://blog.naver.com/isubiramie/20024368885 1. 함수포인터]
         [http://www.codeproject.com/atl/atl_underthehood_.asp 2. 함수포인터]
  • 허아영/Cpp연습 . . . . 4 matches
         아직 클래스도 안배워서 클래스를 써도 좀 C의 성격이 강하다는..
         지금 만드는 지뢰파인더가 지금까지 만든 클래스중에서는 그나마 클래스를 닮았는데 아직 제대로 되려면 한참 멀었으..
  • 05학번만의C++Study/숙제제출1/윤정훈 . . . . 3 matches
          * 섭씨 온도를 전달인자로 전달받아 화씨 온도로 환산하여 리턴하는 사용자 정의 함수를 main() 함수가 호출하는 프로그램을 작성하시오. --[최경현]
          * 요는 함수가 없다는 말..ㅎ 나랑 똑같은 일을 했구나~;;ㅁ;; - [조현태]
  • 2dInDirect3d/Chapter1 . . . . 3 matches
          그럼 실제로 만들어보자. 만들때에는 다음 함수가 필요하다.
         IDirect3D8* pd3d = NULL; // 포인터를 한개 만들어서
          4. [OUT] 세번째 인자를 출력값이다. 그곳의 멤버 변수는 다음과 같다.
  • 3N+1Problem/황재선 . . . . 3 matches
         http://bioinfo.sarang.net/wiki/AlgorithmQuiz_2f3Plus1 에서 yong27님의 소스코드를 보았다. 소스가 정말 깔끔했다. 실행속도가 빨라서 그 원인을 분석해가며 지난번 작성했던 코드를 수정했다. 나의 목적은 0.001초라도 빠르게 결과를 출력하는 것이었다. 실행시간을 최소화하기위해 클래스마저 없앴다. 특히 두 부분을 수정하니 실행시간이 현저히 줄었다. 하나는 클래스 멤버변수를 제거하고 지역변수화한 경우인데 왜 그런지 모르겠다. 둘째는 사전형 타입인 cycleDic 에서 key를 문자열에서 숫자로 바꾼 부분이었다. 지난번 구현시 무엇때문에 수치형을 문자열로 변환하여 key로 만들었는지 모르겠다. -- 재선
  • 5인용C++스터디 . . . . 3 matches
          * [5인용C++스터디/클래스]
          * [5인용C++스터디/클래스상속보충]
          * [5인용C++스터디/클래스상속] - 조재화
  • 5인용C++스터디/템플릿스택 . . . . 3 matches
         템플릿 클래스를 이용하여 스택 구현하기.
         || 문원명 || Upload:StackTemplateMwm.cpp || 잘 했으나.. pop 함수에서 꺼낸 값을 리턴시도록 만들라고 한것 같은데... ||
         || 황재선 || Upload:TemplateStack_JS.cpp || exit 함수로 종료한것만 빼고는 잘했음..ㅋㅋ ||
  • AOI/2004 . . . . 3 matches
         잠깐 다른 사람 소스들을 봤는데 이런식이 많더라. 나쁘다는 건 아니다. 실제로 재동과 상규가 프로그래밍대회에서는 저런식으로 했었다. 이유는 대회에선 무조건 속도전이라 함수 이름이나 함수의 길이는 신경쓰지 못하기 때문이였다. 하지만 적어도 대회가 아닌 연습에서는 좀 더 흐름을 알아보기 쉽게 하는게 좋을 거 같다. --재동
         uva robot의 경우 보통 300 번 이상의 test case 를 쓰는 것 같습니다. 동적 메모리가 아닌 정적으로 할당할 경우 이 점을 유의(?)하지 않으면 RE error(포인터 에러)가 납니다. 보창은 이것때문에 하루종일 프로그램을 뜯어고쳤으나, 결국 우연한 기회에 알게 되었습니다. LCD-Display의 경우 robot은 1000줄 이상을 test하는 걸로 보여집니다. -- 보창
  • AcceleratedC++/Chapter0 . . . . 3 matches
         main 함수의 리턴형과 리턴값
          main 함수의 리턴형은 ISO/ANSI C++ 표준에서 int로 정하고 있다. 리턴값은 프로그램이 아무런 에러 없이 종료되는 경우에는 0을 리턴하도록 되어 있고, 에러가 발생해서 종료한 경우에는 0 이외의 값을 리턴하도록 되어있다. 이 값은 OS로 돌려지는 값이기는 하지만 OS에서 이것에 따라 특별히 처리하는 것은 없기 때문에 일반적인 경우에는 이 값은 아무런 의미가 없다. 이 값을 이용할수 있는 방법으로는 exec... 함수를 이용하여 프로그램을 실행해주고 받아오는 방법 등이 있다.
  • BuildingWikiParserUsingPlex . . . . 3 matches
         현재 PyKi라는, [1002]가 개인적으로 만들어서 사용중인 위키에서의 parser 클래스 중 일부 코드이다.
         처음에는 Wiki 에서 Tag 에 대해 Tagger 클래스를 만들고, link 를 걸어주는 부분에 대해 AutoLinker 를, Macro 에는 MacroApplyer 를 각각 만들어주었다. 그러다가 문제가 생겼는데, 태그중에 그 영향력이 겹치는 부분이 생겨나게 된 것이다. 즉, 예를 든다면 Macro 의 경우 CamelWord 로 이름지어지기도 하는데, 이는 AutoLinker 의 apply 를 거치면서 archor 태그가 붙어버리는 것이다.
         후자의 경우 클래스가 커진다는 단점이 있지만, 의도한 lexical 들만 표현된다는 점과 1 pass 로 파싱이 같이 이루어질 수 있다는 장점이 있다.
  • C++스터디_2005여름/도서관리프로그램/문보창 . . . . 3 matches
         Book 클래스와 ManageBook 클래스로 나눠서 각자 맡은바 임무를 잘 해 주도록 일을 분담했다. 스터디 시간에 Null 포인터에 자꾸 노드를 삽입했기 때문에 노드가 추가 되지 않았다. 그 전에도 그런 실수를 했는데 똑같은 실수를 반복하다니...
  • C/Assembly . . . . 3 matches
         이 페이지는 C언어의 함수들을 Assembly 어로 번역해 두는 곳이자,
         -fomit-frame-pointer 함수를 call 할때 fp를 유지하는 코드(pushl %ebp, leave)를 생성하지 않도록 한다.
         [C/Assembly/포인터와배열]
  • CC2호 . . . . 3 matches
         포인터를 이해하는 것을 목표로 차근차근 진행할 거에요. 물론 숙제 나갑니다!
          * 함수
          * 포인터
  • CNight2011/김태진 . . . . 3 matches
         malloc, 포인터에 대해서 지원누나한테 배웠는데요. a[2]==*(&a[0]+sizeof(int 2))라는 걸 배웠지요.
         int coord_ptr[][];로 함수선언했을때 오류가 왜 뜨는가,- 사실 배열도 결국 포인터이다.
  • CNight2011/송지원 . . . . 3 matches
          * 11학번 풋풋한 새내기 두 명과 함께 malloc과 배열, 포인터에 대해 간단하게 브리핑
         == Round 1 - 배열과 포인터, 그리고 구조체 by [윤종하] ==
          * 포인터와의 연관성
  • Chapter II - Real-Time Systems Concepts . . . . 3 matches
         말 그대로 재진입이 가능한 함수를 말하는 것입니다. 태스크가 하나의 함수로 이루어져있으므로 재진입을
         위해서는 함수에서 쓰일 변수에 대해서 전역으로 설정해 놓으면 안되겠져 만약 전역으로 설정하고 다시 진입하
  • CivaProject . . . . 3 matches
          * 클래스들이 서로 맞물려서 결국 따로 빼게 되었군.
          * 추상클래스니 인스턴스는 생성 안되겠군.
          * 일단 시작... 멀티쓰레드 관련 메소드와 클래스는 못할 듯. 과연 어디까지 할라나...
  • ClassifyByAnagram/Passion . . . . 3 matches
          * 입력을 파싱해서 결과를 분석하는 함수
          * 입력된 Item 의 갯수를 얻는 함수
          * 입력된 Item의 목록을 얻는 함수
  • CollectionParameter . . . . 3 matches
         ComposedMethod의 단점중 하나는, 작은 메소드들 사이의 연관때문이다. 큰 메소드 하나에서 공유되었던 임시 변수들이, 이제는 작은 메소드들 사이에 공유된다. 가장 해결하기 쉬운 방법은 ComposedMethod를 없애고 다시 하나의 큰 메소드에 다 때려넣는 것이지만, 안좋다. 또 다른 해결책으로는 이 작은 메소드들 사이에서 공유되는 임시 변수를 멤버변수에 넣는 것이다. 이것은 객체의 생명기간 동안 유효한게 아니라, 저 메소드들이 실행될때에만 유효하다. 역시 안좋다.
         즉, 두 메소드의 결과를 모으는 경우인데, 그리 흔한 경우는 아니였던걸로 기억. 약간은 다르긴 하지만 나의 경우 CollectionParameter 의 성격으로 필요한 경우가 read/write 등 I/O 가 내부적으로 필요할때 또는 Serialization 등의 일이 필요할때. 그 경우 I/O 부분은 Stream 클래스로 만들고(C++ 의 Stream 을 쓰던지 또는 직접 Stream 클래스 만들어 쓰던지) parameter 로 넘겨주고 그 파라메터의 메소드를 사용하는 형태였음. --[1002]
  • CommonState . . . . 3 matches
         초기 컴퓨터는 용량이 너무 적어서, 프로그램 짧게 만들기 이런걸 많이 해야만 했다. 당연하지만 그걸 알아볼 수 있으리라는 기대는 하지 않았다. 그러다가 용량이 커지니까 이제는 많고 많은 state들을 사용하는 많고 많은 함수들을 많이 사용하게 되었다. 하나 고칠라면 전체를 뜯어 고쳐야 했다. state로서의 프로그램은 안좋다. 그러니 state도 안좋다(??) 이런 상황에서 state가 없고, 프로그램만 있는 함수형 언어가 나오게 되었다. 개념적인 우아함과 수학적인 우아함을 갖추고 있음에도 불구하고, 상업적인 소프트웨어를 만드는데에는 전혀 쓰이지 않았다. 이유는 사람들은 state를 기반으로 생각하고 모델링하기 때문이었다. state는 실세계에 대해 생각하는 좋은 방법이다. 객체는 두 가지의 중간이다.(?이렇게 해석해야하나..--;) state는 잘 다뤄질때만 좋다. 작은 조각으로 나누면 다루기 쉬워진다. 이렇게 하면 변화를 어느 한 곳만 국한시킬 수 있게 된다.
         인스턴스 변수를 클래스 안에 선언하자.
  • CppUnit . . . . 3 matches
          * app 클래스에 다음과 같은 runner 실행을 위한 코드를 추가한다. 다음 코드를 추가함으로써 프로그램 실행시에 GUI Test Runner 가 실행된다.
         void ExampleTestCase::testExample () // 테스트 하려는 함수.
         * 웹서핑을 통해 이곳에 왔습니다. 위에서 ExampleTestCase 클래스와 SimpleTest와의 관계는 어떻게 됩니까?
  • D3D . . . . 3 matches
         보지 않아도 될것 같다. 무슨 소리들을 하는지. 전부 초기화.. --+ 함수 설명 뿐이네. 흐미.. 그냥..[[BR]]
         ==== point3의 연산자와 기본적 함수 ====
         '''전위 함수'''
  • DPSCChapter4 . . . . 3 matches
         '''Adapter(105)''' 는 다른 인터페이스의 Clients들이 예상할수 있는 형태오 클래스의 인터페이스를 변형시킨다. 즉, Adapter는 양립할수 없는 다른 상황의 두가지의 일을 수행하는 클래스를 상호간연결시키는 역할을 한다.
         '''Decorator(161)'''은 object에게 동적으로 임무와 할일을 부여한다. Decorator는 기능의 확장을 위한 함수에 대하여 유연한 선택을 제공한다.
  • DoubleDispatch . . . . 3 matches
         Integer라는 클래스와 Float라는 클래스가 있다. 두 객체 간의 덧셈을 구현하고 싶다. 몇개를 구현해야할까? 4개다. 즉, Integer + Integer, Float + Float, Integer + Float, Float + Integer이렇게 말이다. 이를 해결하기 위한 절차적 방법은 모든 상황을 거대한 case 구문에 넣는 것이다. 이것은 한군데에다가 로직을 다 넣을 수 있다는 장점이 있음에도 불구하고, 유지보수가 어렵다.
         argument에 메세지를 보내라. selector에다가 receiver의 클래스 네임을 덧붙인다. receiver를 argument로 넘긴다. 이 패턴을 사용한 후의 Integer, Float 코드는 다음과 같다.
  • EuclidProblem/이동현 . . . . 3 matches
          xy[1][0] = 1, xy[1][1] = q*-1; //첫함수진입에서 a의 계수는 언제나 1이다.
          xy[1][0] = xy[0][0]*-1*q+tx; //이번함수의 몫q*-1을 곱하고 이전이전함수의 계수를 더한다.
  • GUIProgramming . . . . 3 matches
         GUI를 다루기 위해서 .NET에서 사용하는 클래스이다.
         자바로 작성된 프로그램에서 기본적으로 이용하는 API이다. 플랫폼에 독립적으로 제작된 툴킷이지만 내부 구현 상 플랫폼에서 제공하는 함수를 아주 낮은 수준의 추상화된 형태로만 제공하기 때문에 자바의 Platform-independable의 특성을 충분히 만족할 만한 수준은 못된다.
         최근 버전의 자바에서 이용하기 시작한 선사의 툴킷이다. 특징으로는 AWT보다 더욱 보기 좋은 그래픽을 제공한다. 또한 AWT와 달리 플랫폼에 비종속적이기 때문에 모든 플랫폼에서 동일한 모양을 보여준다. 그리고 클래스 라이브러리에 약간의 수정을 가함으로써 Windows 에서 기타 플랫폼 (예를 들자면 Mac)의 {{{~cpp Look&Feel}}}사용하는 것이 가능하다. 물론 -_-; 원칙적으로 특정 운영체제의 룩&필은 변경해서 응용프로그램을 개발하는 것은 정책상 불법의 범주에 속한다..
  • GuiTestingWithMfc . . . . 3 matches
         Dialog Based 의 경우 Modal Dialog 를 이용하게 된다. 이 경우 Dialog 내에서만 메세지루프가 작동하게 되므로, DoModal 함수로 다이얼로그를 띄운 이후의 코드는 해당 Dialog 가 닫히기 전까지는 실행되지 않는다. 고로, CppUnit 에서의 fixture 를 미리 구성하여 쓸 수 없다.
         이는 App 클래스의 InitInstance 함수에서 해준다.
  • HanoiProblem/영동 . . . . 3 matches
          call Move ;Move함수 호출
          ;(by와 to의 위치를 바꿔서 함수 호출)
         Space proc ;띄어쓰기 함수
  • HowManyPiecesOfLand?/문보창 . . . . 3 matches
         이론상으론 O(1) 시간만에 되겠지만 문제는 입력범위가 2 <sup>31</sup> - 1 까지 들어올 수 있기 때문에 고정도 연산을 수행해야 한다. GNU C++ 이나 Java는 고정도 연산을 수행할 수 있는 클래스를 포함하고 있으나, 윈도우 C++에는 없다(혹, 내가 못찾는 것일수도 있다). 따라서 고정도 연산을 수행할 수 있는 클래스를 짰다. 성능이 너무 떨어진다. O(1) 을 O(n<sup>5</sup>) 정도로 바꿔 놓은 듯한 느낌이다. 이 Class를 개선한뒤 다시 테스트 해봐야 겠다.
         // 함수 호출이 모두 복사로 이루어지므로 성능이 크게 떨어진다.
  • IntelliJ . . . . 3 matches
         리팩토링시에 JSP 에서 사용된 클래스들도 같이 리팩토링해준다.
         || ctrl + I || Interface 구현. actionPerformed 등의 상위 추상클래스들의 interface 틀을 만들어준다. 유용 ||
         || ctrl + N || 해당 클래스로 이동 ||
  • IsBiggerSmarter?/문보창 . . . . 3 matches
         단순히 Greedy 알고리즘으로 접근. 실패. Dynamic Programming 이 필요함을 테스트 케이스로써 확인했다. Dynamic Programming 을 실제로 해본 경험이 없기 때문에 감이 잡히지 않았다. Introduction To Algorithm에서 Dynamic Programing 부분을 읽어 공부한 후 문제분석을 다시 시도했다. 이 문제를 쉽게 풀기 위해 Weight를 정렬한 배열과 IQ를 정렬한 배열을 하나의 문자열로 보았다. 그렇다면 문제에서 원하는 "가장 긴 시퀀스" 는 Longest Common Subsequence가 되고, LCS는 Dynamic Algorithm으로 쉽게 풀리는 문제중 하나였다. 무게가 같거나, IQ가 같을수도 있기 때문에 LCS에서 오류가 나는 것을 피하기 위해 소트함수를 처리해 주는 과정에서 약간의 어려움을 겪었다.
         lcs_length함수에서 cost table을 만들어주는 과정의 running time은 O(n*n), memory cost는 O(n*n)이다. 그리고 print_lcs 함수에서 longest path를 거슬러 올라가는 running time은 O(n + n) = O(n)이다.
  • JTDStudy . . . . 3 matches
          * 멤버 모집
          * 첫번째 과제로 Java에서 멤버함수 만들어보기 해볼까요?^^;; - [상욱]
  • JollyJumpers/황재선 . . . . 3 matches
         2. main이 지저분하다. 함수로 추출하기도 뭐하다.
         3. test코드를 다듬었다. 테스트할때마다 콘솔로 입력받는 게 귀찮아서 test클래스에서 메인 클래스의 field를 정의하고 진행했다. 또 다른 테스트를 하기위해서 고쳐야할 부분이 흩어져 있다. 테스트코드의 설계에 관심을 가져야겠다.
  • LIB_1 . . . . 3 matches
         LIB_create_task (char* string,int,&task_point,task_size) 함수
         태스크들을 만들어주는 함수이다.
          LIB_create_task("Management\n",63,mn_task,&TaskStack0[256]); // 매니져 함수를 만들어준다.
  • LIB_2 . . . . 3 matches
         씨에서는 interrupt란 예약어로 함수를 인터럽트 콜이 가능한 함수를 만들 수 있다.[[BR]]
         인터럽트 서비스 루틴을 초기화 해주는 함수로 [[BR]]
  • LIB_3 . . . . 3 matches
         이 함수는 스케쥴링을 위한 준비 과정 TCB들을 다 초기화 해 준다.. 겁이 많아서 그냥 다 초기화 해줬다.[[BR]]
         여기서는 MAIN에서 본 듯 태스크를 만들어 주는 함수
          // Init the TCB by argument <----- 함수에서 얻은 변수들로... 초기화...ok???
  • LinkedList . . . . 3 matches
          * [데이터0,데이터1을 가리키는 데이터형(포인터)] - [데이터1,데이터 2를 가리키는 데이터형(포인터)] .... [데이터N-1,데이터 N을 가리키는 데이터형(포인터)] - [데이터N, NULL] 대충 이런 꼴의 자료형을 만들면 된다.
  • LinuxProgramming/SignalHandling . . . . 3 matches
         쉽게 MFC 와 비유하여 설명하는 시그널은 메시지와 비슷하다고 보면 된다. 실제로 signal 함수를 이용해서 우리는 MFC에서 이벤트와 이벤트 핸들러를 연결하듯 프로그래밍을 한다는 사실을 알 수 있다. (이렇게 보면 정말로 유닉스가 C로 짜여있다는 것을 확실하게 알 수 있다.)
         당연히 이해를 위해서는 함수 포인터를 알아야하며, 그 이외에는 굉장히 단순하다는 것을 알 수 있다.
  • MFCStudy2006/1주차 . . . . 3 matches
          * MFC 프로그래밍을 하는데 있어 기본적으로 생성되는 5개의 클래스와 그 함수의 쓰임을 알아오시오.
          * 화면 위치 및 크기 조정 : CMainFrame 클래스 -> PreCreateWindow() 에서 수정
  • MFCStudy_2001 . . . . 3 matches
         [상협] 버그 이유 방금 찾았어여... 요인은 띈 33 공격 함수 부분이었어여.. 띈 33 공격과 방어를 같은 함수로 처리하면서 문제가 생긴거 같아요. 이제 에러 뜨는 일은 없을거 같네여...아예 띈 33 공격 함수를 작동 안하게 만들었거든요..ㅡㅡ;; 나중에 시간 나면 고쳐서 넣아야징...
  • MineSweeper/이승한 . . . . 3 matches
         이땐 객체가 무언지 잘 몰라서 함수와 전역 변수들만 가지고 만들어 본...-_-ㅋ;; C랑 다른건 Array 객체를 사용한 정도??;;
         blank symbol : 플레시가 실행되면 변수를 초기화하고 함수를 부르는.
          // 0으로 셋팅된 배열의 모든 원소를 아웃펏에 보여주는 함수
  • Omok . . . . 3 matches
          * 제가 작년에 썼던 방법입니다. 터보씨의 그래픽 함수중에서는 clrscr() 함수만 사용합니다.
          * 터보씨에서 지원하는 C 의 그래픽 함수들을 이용해서 colorful 한..-_-;; 그런 오목을 만드는 겁니다.
  • OurMajorLangIsCAndCPlusPlus/time.h . . . . 3 matches
         time.h - time 과 date 에 관련된 함수
         == time 함수간의 대략적인 다이어그램 ==
         == 함수 (Functions) ==
  • PowerOfCryptography/이영호 . . . . 3 matches
         // 반올림은 ceil, floor 함수로 효율성 있게 구성한다.
         // 여기서 문자를 숫자로 변경하고 log10 함수를 사용한다.
         // 수학 함수는 func(). n, p를 받아들이고 정수 k를 반환함.
  • PowerOfCryptography/조현태 . . . . 3 matches
          필요할때마다 malloc으로 할당하고 포인터로 넘겨서 연산하는 방법이 있습니다만....(귀찮다...귀찮다..귀찮다..윽.. 이게 아니잖아!!) -[조현태]
          한번 공부하고 만들어봐... C언어에서 인라인 어셈 써서 함수 만들어두 좋구. 아래 참고. - [이영호]
          ;;ㅁ;; 음.. 영호선배는 넘흐 마니 알고이쩡..>ㅃ<;; C언어 소스 봐도 모르게떠용..ㅎㅎ 64비트형의 인트형의 변수를 두개 지정하고 a에다가 최대값을..(아마 부호가 있기 때문에 -1저장됬을듯한..)넣고 b에는 a-1을.. 그럼 -2가 저장..;; 음.. 이게 아니라 혹시 b가 포인터라서 메모리 한칸 앞쪽을 잡아주는 건가요? 음.. 그러면 할당되지않은 메모리를 건드는 사태가..;;ㅁ;; 이것도 아닌가.. 연구를..;;ㅁ;; - [조현태]
  • ProjectGaia/계획설계 . . . . 3 matches
          또한 슬롯을 추가할 경우에 추가할 위치를 포인터로써 바로 접근 할 수 있을것임.
          1. 어떤 레코드를 삽입/삭제/검색을 하고자 포인터를 찾고자 할 경우에..
          * 삭제/검색시에 해당 포인터로 이동하여 세부수행
  • ProjectZephyrus/Afterwords . . . . 3 matches
          * Server Architecture 디자인이 잘 되었다. - 자신이 맡은 클래스에만 충실하면 되었다.
          - SPEC 에 대한 구체적 문서화 부족. 초기 문서화 대신에 팀의 모임시 대화로 대체하였는데, 후에 추가 멤버가 제시한 의견, 문서화도 부족했지만, 후속 멤버의 피드백 역시 부족하였다.
  • ProjectZephyrus/ServerJourney . . . . 3 matches
          * Logout 클래스 작성, Rename작업, 04일에 의논한 내용 UML에 반영
          1. {{{~cpp JavaDoc}}}을 이용한 도움말 작성 package설명 추가, 각 클래스별 설명 추가, 각 메소드별 설명 추가
          * mm.mysql 클래스 패스 잡기가 너무 귀찮다. 아예 그냥 프로그램 내부에 넣어 버려야 겠다.
  • RandomWalk/손동일 . . . . 3 matches
          int x = rand(); // rand()함수는 랜덤한 숫자를 리턴하는 함수입니다.
         //함수를 부르면 되겠다...
  • RandomWalk2/Insu . . . . 3 matches
         = 살짝 OOP 너무 잘게 나누면 관리하기 힘들것 같아서 일단 보드, 바퀴벌레 두개의 클래스로만 나눴음 version 2.0 =
          * STL 컨테이너는 복사본을 사용한다는 걸 알고 포인터로 바꿨습니다.
          * ... 지금 보니까 SuperRoach 클래스는 왜 만들었는지 의문이 간다.
  • Randomwalk/조동영 . . . . 3 matches
          // 2중동적배열을 만드는 함수
          // 바퀴벌레가 범위를 벗어나지 않도록 해주는 함수
          // 바퀴벌레를 이동시키고 카운트를 하는 함수
  • TestFirstProgramming . . . . 3 matches
         후자의 경우는 해당 코드의 구조를 테스트해나가는 방법으로, 해당 코드의 진행이 의도한 상황에 맞게 진행되어가는지를 체크해나가는 방법이다. 이는 MockObjects 를 이용하여 접근할 수 있다. 즉, 해당 테스트하려는 모듈을 MockObject로 구현하고, 호출되기 원하는 함수들이 제대로 호출되었는지를 (MockObjects 의 mockobject.py 에 있는 ExpectationCounter 등의 이용) 확인하거나 해당 데이터의 추가 & 삭제관련 함수들이 제대로 호출되었는지를 확인하는 방법 (ExpectationList, Set, Map 등의 이용) 등으로서 접근해 나갈 수 있다.
         '지금 저쪽에는 에코서버가 있어. 지금 만들건 클라이언트고, 지금 만들 클래스로 write 를 하면 저기 띄어놓은 에코서버에 내가 입력한 메세지가 그대로 표시될거야' 즉, 완성되었을 때의 결과를 미리 그려보는 것이다.
  • VendingMachine/세연 . . . . 3 matches
         //자판기 클래스
          * 코드를 읽기 편한가. - 외부로 보이는 public 메소드의 이름에 대해 'how' 가 아닌 'what' 이 표현되어야 할겁니다. 클래스는 보통 '이용되어지는 모습' 으로 이용되므로, 어떤 알고리즘을 쓰느냐가 메소드로 표현되는게 아니라 '무엇을 할것인가' 가 표현되어야 겠죠.
          * 코드의 중복이 얼마나 적은가 - 코드 중복이 많을 수록, 코드 하나가 잘못되면, 나머지 중복코드들도 다 고쳐줘야 합니다. Copy & Paste 를 하는 것과 함수/메소드로 추출한 것의 차이가 되겠죠.
  • VisualStudio . . . . 3 matches
         VisualC++ 6.0은 VS.NET 계열에 비하여 상대적으로 버그가 많다. 가끔 IntelliSense 기능이 안될때가 많으며 클래스뷰도 깨지고, 전체 재 컴파일을 필요로하는 상황도 많이 발생한다. ( 혹시, Debug Mode에서 돌아가다가, Release Mode에서 돌아가지 않는 경우도 있는데 보통 이는 프로그램에서 실수 태반이다. 그러나 간혹 높은 최적화로 인해 돌아가지 않을때도 있을 수 있다. )
         C++ 에서는 자바에서의 import 의 명령과 달리 해당 헤더화일에 대한 pre-processor 의 기능으로서 'include' 를 한다. 그러다 보니 해당 클래스함수 등에 redefinition 문제가 발생한다. 이를 방지하는 방법으로 하나는 #ifndef - #endif 등의 명령을 쓰는것이고 하나는 pragma once 이다.
  • VonNeumannAirport/1002 . . . . 3 matches
         여기서 Test - Code 의 시간이 꽤 길었다. (9분) 함수 refinement 부분에서 STL 에 있는 find 함수를 함 써먹어 보려고 했다가;; 결국은 평소 하던데로 했다. ^^;
         근데, Refactoring 에 대해서만 1시간을 쓴 것 같다. 그것도 메인 코드인 Configuration 클래스 보단, Test 코드에 대한 Refactoring 이 주가 된 것 같다. 실질적인 실용성을 볼때, 메인 코드에 대한 Refactoring 위주로 나가는 것이 좋을 것 같다. (깨진 Test 는 주로 삭제하는 스타일로 가고..)
  • WebGL . . . . 3 matches
         [Javascript]임에도 불구하고 마치 C프로그래밍 스타일의 함수들이 존재한다. [WinAPI]가 C스타일의 [OOP]이듯 WebGL 또한 C스타일의 OOP이다. 모든 함수는 WebGLcontext라는 객체에 있는데 보면 그냥 접두어를 붙이는 느낌이다.
         위의 코드를 보면 [쉐이더] 프로그램에 fragmentShader와 vertexShader를 Link 시키는 구문인데 주체인 shaderProgram은 첫번쨰 인자이고 gl은 그냥 접두어 처럼 보인다. 저 구문만 그런것이 아니라 다른 모든 함수들이 저 gl 객체에 붙어있다. 하지만 정작 gl이 주체가 아닌 것들이 많다. 따라서 래핑한 객체를 만들어 쓰는 것이 속편한데 어설프게 했다가는 무척 꼬이게 된다.
  • Yggdrasil/가속된씨플플/1장 . . . . 3 matches
         == 클래스 string ==
         std::string name2(3, '!');//이것도 생성자. 두번째 인자를 첫번째 인자만큼 채워서 string객체를 초기화. 즉 memset()함수와 비슷한 기능
         std::cout<<name1.size();//strlen()처럼 string객체의 글자수를 리턴하는 함수.
  • Yggdrasil/가속된씨플플/2장 . . . . 3 matches
         == 클래스 string ==
          * 1장에서 배운 string 클래스에 추가할 내용. SeeAlso ["Yggdrasil/가속된씨플플/1장"]
         std::string::size_type//unsigned형의 멤버변수로, 담을 수 있는 최대 문자 갯수를 저장한다. 글자수에 알맞는 type으로 알아서 정의하는 듯.
  • ZPBoard/PHPStudy/기본문법 . . . . 3 matches
         == 함수 ==
         function 함수명(전달인자){
          * 그냥 함수로 설정만 하면 뭐든 할 수 있음
  • [Lovely]boy^_^/Diary/2-2-10 . . . . 3 matches
          * 오늘의 XB는 삽질이었다.--; Date클래스의 날짜, 월 등등이 0부터 시작한다는 사실을 모르고 왜 계속 테스트가 failed하는지 알수가 없었던 것이었다. 덕택에 평소엔 거들떠도 안보던 Calendar, 그레고리Date, SimpleData등등 날짜에 관련된 클래스들을 다 뒤져볼수 있었다. 하지만..--; 결국 Date클래스에서 끝났다. 이제 UI부분만 하면 될듯하다.
  • django/Model . . . . 3 matches
         혹은 모델이 되는 클래스의 이름을 문자열로 지정할 수도 있다. 이는 클래스를 정의하는 순서에 상관없이 한 모델이 다른 모델을 참조할 수 있도록 한다.
         Django는 정의한 모델에 Admin클래스를 재정의해서 이를 삽입, 삭제, 갱신할 수 있는 기본적인 관리자 인터페이스를 자동으로 생성해준다. 사용자 인터페이스는 입력 항목을 원하는대로 배치할 수 있으며, 원하는 디자인도 적용할 수 있다. 이것으로 기본적인 입력 시스템은 만들어졌다.
  • django/ModifyingObject . . . . 3 matches
         SQL문에서는 insert into values 구문을 이용해 레코드를 삽입하고, update set where 구문을 이용해 레코드를 수정한다. 하지만 django는 이 둘을 하나로 보고 데이터베이스에 레코드를 삽입하고 갱신하는 작업을, 모델로 만든 객체를 저장(save)하는 것으로 추상화했다. 기본적으로 모델클래스는 save메소드를 가진다. 따라서 개발자가 작성한 모델도 save메소드를 가지며, 이는 오버라이딩 할 수 있다. 아래 예에서 보듯이 save 메소드는 새로만든 레코드 필드의 속성에 따라서 적당히 삽입과 갱신 작업을 수행한다.
         Employee 모델에 해당하는 새로운 객체를 만들고 save메소드를 이용하면, 데이터베이스에 새로운 레코드를 삽입하거나, 기존의 레코드를 갱신한다. 기존에 삽입하지 않았기 때문에 처음 save를 호출하면 레코드를 삽입하고, 다음 번 save를 호출하면 레코드를 갱신한다. 레코드는 객체로, 레코드의 속성을 객체의 멤버 변수로 취급한다.
         데이터베이스에서 레코드를 삭제하는 작업은 Model클래스의 delete메소드로 추상화했다. 하지만 내부에서 실제로 레코드를 삭제하는 메소드는 delete_objects이다.[8] delete_objects메소드는 지우려는 레코드를 참조하는 다른 테이블의 레코드까지 함께 삭제하거나, 외래키를 NULL값으로 설정한다. 예를 들어 다음은 Risk테이블에서 한 레코드를 삭제하는 경우 이를 참조하는 Consequence, Control 테이블의 레코드까지 함께 삭제하는지를 묻는 사용자 화면이다.
  • eclipse단축키 . . . . 3 matches
          * Open Declaration : 함수 구현 부분으로 이동
          * 해당 함수의 Java API 웹 페이지를 보여준다.
          * 함수 단위로 이동
  • 논문번역/2012년스터디/이민석 . . . . 3 matches
         강도 분포의 평균값의 변화 뿐 아니라 하단 contour와 상단 contour의 방향을 고려하기 위해 추가적으로 세 가지 방향성 특징을 계산한다. 말인 즉 우리는 네 lower countour 점, upper contour 점, sliding window 내 평균값을 통해 줄들을 재고 선 방향들을 (8), (9), (10) 특성으로 각각 사용한다. (뭔 소리) 더 넓은 temporal context를 고려하여 우리는 특징 벡터의 각 성분마다 근사적인 수평 미분을 추가로 계산하고 결과로 20 차원 특징 벡터를 얻는다. (윈도우당 특징 10개, 도함수 10개)
         특징 벡터들을 decorrelate하고 종류 분별력을 향상하기 위해 우리는 훈련 단계와 인식 단계에서 LDA를 통합한다. (cf. [6]) 원래 특징 표현을 일차 변환하고 특징 공간의 차원을 점차 줄이며 최적화한다. 일차 변환 A를 구하기 위해 훈련 자료의 클래스내 분산(within class scatter) 행렬 Sw와 클래스간 분산(between class scatter) 행렬 Sb를 이용하여 고유 벡터 문제를 해결한다. 이 분산(scatter) 행렬들을 계산하여 각 특징 벡터의 HMM 상태와 함께 이름표를 붙여야 한다. 우리는 먼저 일반적인 훈련을 수행하고 훈련 자료들을 상태를 기준으로 정렬한다. 분산 행렬을 구했으면 LDA 변환은 다음 고유 벡터 문제를 풀어 계산한다.
  • 니젤프림/BuilderPattern . . . . 3 matches
         빌더 패턴은 소프트웨어 디자인 패턴의 하나이다. 빌더 패턴은 복잡한 객체를 생성하는 방법과, 표현하는 방법을 정의하는 클래스를 별도로 분리한다. 이 분리로서 얻어지는 효과는, 동일한 생성 과정이 다른 표현을 얻어낼 수 있게 되는 것이다.
         쉽게 말해서, 아주 복잡한 오브젝트를 생성해야하는데, 그 일을 오브젝트를 원하는 클래스가 하는게 아니라, Builder 에게 시키는 것이다. 그런데 자꾸 나오는 생성/표현 의 의미는, 바로 director 의 존재를 설명해 준다고 할 수 있다. director 는 Building step(construction process) 을 정의하고 concrete builder 는 product 의 구체적인 표현(representation) 을 정의하기에.. 그리고, builder 가 추상적인 인터페이스를 제공하므로 director 는 그것을 이용하는 것이다.
         Director 클래스는 Product 를 생성하는 방법과 순서 등을 주관한다. Builder 인스턴스를 가지고 있기 때문에 Concrete Builder 를 건네 받아서 Builder 에 연결해 준다.
  • 데블스캠프2002/날적이 . . . . 3 matches
          * [영동] : 우선 처음엔 랜덤워크의 변형인 랜덤워크2를 짰습니다만 "43134331256..."식으로 입력 받는 것과 x축의 칸수를 적게 하고 y축의 칸수를 많게 하고 계속 아래로 전진하면 숫자가 이상하게 올라가는 버그가 나왔는데 둘 다 아직 고치지 못 했습니다... 전자의 경우는 그래도 좀 연구하면 가망이 있어 보이는데 후자의 경우는 어디가 틀렸는지 감도 못 잡겠습니다. 그리고 선배님들께서 준비해 주신 구조적 프로그램, 객체지향 프로그램은 처음에 선배님들께서 해주신 강의까지는 그럭저럭 개념은 알겠는데 나중에 클래스로 랜덤워크 짜라는 것이 나온 후로는 데블스 캠프가 그냥 이걸로 끝이 아니라는 것을 느꼈습니다... 여기서 며칠 밤 새는 것 외에도 혼자서 공부해 나가야 할 것이 많다고 느꼈습니다.
          그래도 씨의 새롭고 유익한 함수들을 접할 수 있는 좋은 기회였네요^^[[BR]]
          그리고 처음에는 스위치 함수안의 이프문을 사용했는데 중복되는 명령문들이 아주 많이 나와서 소스가 너무 복잡하게 보였습니다. (재동
  • 데블스캠프2005/FLASH키워드정리 . . . . 3 matches
         플레시의 함수는 특별한 데이터 타입이 없으므로 리턴타입을 미리 선언하지 않는다.
         버튼 이벤트를 처리하는 on(release), on(press) 등의 함수
         무비클립 이벤트를 처리하는 onClipEvent(load), onClipEvent(enterFrame)...등의 함수
  • 데블스캠프2005/Python . . . . 3 matches
          * dir() : 인수에 객체를 전달하면 객체 내에서 사용할 수 있는 함수 리스트를 리턴한다.
         >>> 1 in t 멤버십 테스트
         멤버십 테스트 'a' in s
  • 데블스캠프2005/RUR-PLE/정수민 . . . . 3 matches
          추신: 궁금한 점이 있소.muggi함수의 제일 아래 ()는 무엇을 뜻하는 것이오? 없어도 실행이 잘 되오.
         먹기함수 제일밑에 ()는 수정중에 실수로 남아있던거 =0=;; 근데 저게있어두 실행이 돼긴돼는군;;;
         그리고 여기서 재귀함수는 선을 그어서 그밑에있는건 무조건 실행해 더 낮은 줄에있어도 if이있으면 실행이 돼는 =0=;;
  • 데블스캠프2005/RUR_PLE/조현태 . . . . 3 matches
         파일을 copy/paste하는 과정에서 중간중간에 빈 줄이 생겼는데, 일부 삭제하였으나 남은 것이 있을 경우 지우고 사용해야 합니다.(단 함수함수사이는 아닙니다.)
         소트 함수명은 sort()입니다.
  • 데블스캠프2005/월요일 . . . . 3 matches
          (5)함수의 이해
          (5)#2 : 함수를 이용한 곱셈기
          (10)#5 : 2차함수 운동
  • 데블스캠프2006/월요일/함수 . . . . 3 matches
         == 함수 ==
         [데블스캠프2006/월요일/함수/문제풀이]
          [DeleteMe] ) 파일자료 가 아닌, 데블스캠프2006/월요일/함수/파일자료 이런식으로 올려주시기 바랍니다.
  • 데블스캠프2006/준비 . . . . 3 matches
         - 월 : 표준입출력, 문법, 함수, MSDN, 비트연산, 아스키 / 수생, 유선, 용안, 정현, 규완
         - 화 : 구조체, 파일 입출력, 포인터(메모리), 디버깅 / 아영, 상규, 선호, 도현
         - 목 : 클래스, 객체지향, API / 선호, 준수, 용재, 창섭 , 재혁
  • 데블스캠프2006/준비/월요일 . . . . 3 matches
         문법,함수,MSDN,SVN,SSH,파일입출력
         || 문법 || 함수 || MSDN || SVN,SSH || 파일입출력 || 계정 및 따로 공부 ㅋㅋ ||
         ||pm 10:00~12:00 || 함수 || 김정현 (01) ||
  • 데블스캠프2011/다섯째날/후기 . . . . 3 matches
          * 마지막날이다 보니 다들 후기 갯수가 좀 적군요. Rurple에 이어서 Python을 공부해볼 수 있어서 좋았습니다. 파이썬이 러플로 했을땐 코드 길이가 짧았는데, 다른걸 짤땐 어떤 면에서 짧아지는지는 아직 잘 모르겠네요. 네트워크는 CAU_MAC인데다 MAC을 쓰다보니 충돌의 연속.. 결국 다른 사람들이 하는걸 같이 보는게 좀 많았네요.ㅋㅋ 11학번 친구들이 오늘은 2명이나 와서 참여해서 재밌게 했던거 같습니다.. 만 화수랑 호동이는 약간 어려워 하더군요. (저는 이미 그런 상황에 적응해버린건지 객체니 클래스니 해도 그냥 뭐... 했달까요 ㅎㅎㅎ;)
          * 옛날에 c로 TCP/IP 프로그래밍 책을 본 적이 있었는데 그쪽에서 소켓을 이용하는 부분을 생각해보면 c에 비해서 파이썬쪽에서는 참 쉽게 되는구나 싶었습니다. 그리고 개인적으로 좀 신기했던게 리턴 값이 하나 이상 있을 수 있는 함수도 있다고 한 부분이었습니다. 이건 파이썬쪽의 특성인지 아니면 다른 인터프리터쪽 언어도 이렇게 될 수 있는지 궁금하네요. 네트워크쪽에 대한 기본적인 설명도 좋았습니다. 와이어샤크쪽에 대해서는 제대로 알려면 공부가 더 필요할 듯. -_-
          * 수경이의 String 코드 레이스에서 저의 프로그래밍 달리기를 너무 빡세게 했던게 부끄러워서 이번엔 1학년 학우(저 같은 경우 성화수 학우)에게 설명해주고 그 학우가 하고 싶은 스펙으로 함께 프로그래밍 하고자 많이 노력했습니다. 파트너 교체 후 순의랑 파란 바를 만들어버리는 실수를 저지르긴 했습니다만 제가 부족한 탓이었구요-_-;; 개인적으로 화수의 '0층부터 지하까지' 아이디어는 신선했어요. 형진이가 처음에 의도했던 엘레베이터 문제(밖에서 누르고 층을 누르는 케이스)는 다른 클래스도 필요하고 일단 화수를 이해시키는데에 초점을 둬서 그걸 못 푼 점은 좀 아쉬웠어요.
  • 데블스캠프2011/둘째날/Machine-Learning/NaiveBayesClassifier/강성현 . . . . 3 matches
          * HashMap을 사용하여 단어와 빈도수를 저장함. 저장할 빈도수가 2개라 int형 2개를 저장하는 Int2 클래스를 만듦.
          * 파일입력은 FileData 클래스를 만들어서 사용. java.util.Scanner를 사용하였음.
          * train 데이터를 읽어들여서 일단 문자열과 빈도수를 csv 파일로 저장. 이를 Analyze 클래스에서 csv 파일을 읽어들여 test 데이터를 판별.
  • 데블스캠프2012/다섯째날/후기 . . . . 3 matches
          * [이재형] - 오버로딩이나, 탬플릿 까지는 어렵지 않게 이해했는데 그 뒤부터 클래스, 구조체, 생성자와 소멸자, 상속, 가상함수 등등 부족한게 많아서 정말 멘붕에 멘붕을 거듭했습니다. 그래도 정말정말 How에대한 관점으로 공부해야겠다는 필요성과 더불어 이번 방학 공부에 동기부여가 잘 될 것 같아서 좌절감만 드는 것이 아니였습니다. 좋은 어려움이였던 것 같습니다.
          * [서민관] - 개인적으로 C로 C++처럼 만들어 볼 수는 없을까 하는 생각을 조금 한 일이 있어서 보다 와 닿았던 것 같은 느낌이 강했습니다. 그리고 구조체의 맨 앞에 포인터를 배치해서 캐스팅하는 방법은 꽤나 그럴싸하군요. 항상 C++에서 궁금했던 것이 왜 맨날 첫 4바이트가 vtable의 정보를 가지고 있는 것인가였는데 아무래도 이번 실습 때 그걸 몸으로 체험한 것 같습니다. 난이도도 그렇게 높지 않으면서 진행도 단계적으로 되어 있어서 따라가기도 편했습니다. 다만 1학년한테는... 음...
  • 레밍즈프로젝트/프로토타입 . . . . 3 matches
         '''단순한 기술에 대한 사용이 아니라 재 사용 가능한 클래스를 만들어 보는게 핵심이다.'''
         [레밍즈프로젝트/그리기DC]가 가장 최신 클래스 이다. 아래는 테스트 타입 문서들.
         참고 : MFC에서는 [(zeropage)STL/String] 보다는 CString 클래스를 사용하는게 [(zeropage)MFC/Serialize]를 하는데 용이하다고 한다.
  • 레밍즈프로젝트/프로토타입/에니메이션 . . . . 3 matches
         추상화 기초 클래스.
         에니메이션이 필요한 객체들은 이 클래스를 상속 받음으로서 에니메이션 처리를 할 수 있다.
         이 클래스는 더블버퍼링과 bmp그리기를 자동화 시켜둔 [레밍즈프로젝트/그리기DC](CmyDouBuffDC)를 사용하여 드로잉을 수행한다. (CDC를 사용하는 도 있지만... 편의를 위해서...)
  • 문자반대출력/변형진 . . . . 3 matches
         PHP에서는 strrev()라는 문자열 처리 기본 함수를 제공하지만, 현재 버전에서의 PHP는 기본 함수로는 Multibyte String을 지원하지 못한다.
         preg_split()는 문자열 처리 능력이 탁월한 언어인 Perl에서 사용하는 Perl 호환 정규 표현식(Regular Expressions)을 차용하여 문자열을 분리하여 배열에 담는 함수.
  • 방울뱀스터디/GUI . . . . 3 matches
         command는 단추를 눌렀을때 수행하는 함수를 지정한다.
         Radiobutton 함수호출에서 indicatoron=0을 넣어주면 라디오버튼모양이 푸시버튼모양으로 된다.
         1. 위젯(객체)의 yscrollcommand 콜백 함수를 스크롤바 set 메쏘드에 설정한다.
  • 방울뱀스터디/Thread . . . . 3 matches
         쓰레드를 사용하려면 : 쓰레드로 처리할 부분을 함수로 만들어주고 start_new_thread()로 그 함수로 호출하면 됩니다.
         allow_lock() 함수는 새로운 락 객체를 넘겨준다.(3)
  • 새싹교실/2011 . . . . 3 matches
         내가 짠 코드를 직접 출력을 통해 확인하는 것은 분명 매력적인 일입니다. 그러나 처음 익힌 코딩 습관은 버리기 매우 어렵습니다. 많은 학생들이 처음 프로그래밍을 배우며 printf 함수를 사용하여 코드를 검증하는 습관을 들입니다. 그 때문에 상당수의 졸업할때까지 테스트보다는 직접 눈으로 확인하는 것을 선호합니다. 그런데 작성한 코드가 잘 돌아가는지 알기 위해 직접 눈으로 확인해야만 하는 것은 매우 많은 문제가 있습니다.(이것에 대해서 더 적자면 정말 길어질테니 일단 이 페이지엔 적지 않겠습니다.)
          * 학교 수업에서 사용하기 때문에 printf 함수를 소개할 필요는 있습니다. 그러나 새싹교실에서 실습한 코드들을 검증하기 위해 매번 printf를 사용하는 것은 권장하지 않습니다.
          * 테스트는 [http://winapi.co.kr/clec/reference/assert.gif assert]함수를 통해 간단히 만들 수 있습니다.
  • 새싹교실/2011/Pixar/5월 . . . . 3 matches
          * 재귀 함수 복습
          * 오늘 하노이탑을 하고 재귀함수를 이용한 숙제를 했습니당. 아오 하노이탑 어려웠습니다. from temp to 유후 아직 조금 어려워요 ㅠㅠ. 프링글스는 맛있었습니다. 오늘 ARRAY가 너무너무 배우고싶었는데 망할 오상준과 이승열 이자식들이 안와서 못배웠습니다 ㅠㅠ. 숙제 집에가서 다시한번해볼려구요 더 많이ㅣㅣㅣㅣ 배우고싶어요 누나 ㅋㅋㅋㅋㅋ
          * 오늘은 재귀함수 복습하는 차원에서 하노이탑을 같이 구현해봤습니다. 아마 좀 어려웠을거예요. 저도 1학년때 어디서 열심히 보고 짰는데 방학되고 짜보려니 또 생각이 안 나서 헤맸던 기억이 나네요. 오늘 해봐서 알겠지만 완성된 하노이탑 소스코드가 원반 하나하나를 순서대로 옮기는 프로그램은 아니었어요. 그런데도 실행시키니 제대로 움직이는 걸 볼 수 있었죠. 만약 원반 하나하나를 따로 생각했다면 원반이 7개만 되어도 생각하기 너무 어려웠겠지만 n개의 원반을 옮기는 문제를 n-1개의 원반을 옮기는 문제와 n번째 원반을 옮기는 문제로 나눠서 생각하니 간단하게 해결됐죠. 앞으로 학년이 올라가면서 더 복잡한 프로그램을 짜다보면 이런 접근이 얼마나 중요한지 느끼게 될 거예요. 문제를 해결할 때 전체를 보고 단계를 나눌 수 있어야합니다. 우리가 그림을 그릴때 숲을 그린다고 하면 어떤 귀퉁이의 나뭇잎 하나부터 그려나가는 게 아니잖아요. 나무의 배치, 뼈대같은 것을 먼저 그려야 균형잡힌 그림을 그릴 수 있듯 프로그램을 만들 때도 큰 그림을 먼저 생각해볼 수 있었으면 좋겠습니다. 물론 그런 접근이 단번에 몸에 익지는 않을 거예요 ㅋㅋ
  • 새싹교실/2011/學高/1회차 . . . . 3 matches
          3 . 약간의 함수...
          * #include <stdio.h> : stdio라는 헤더파일의 함수를 사용하기 위해 include 하겠다
          * printf("출력할 내용"); : 기본적으로 출력하는 함수
  • 새싹교실/2011/씨언어발전/3회차 . . . . 3 matches
         함수에대한 기본적인 개념을 설명해 주었습니다.
         main 도 함수의 일종, 같은 작업을 여러번 반복해서 쓰지 않고 함수를 이용해 쓸 수 있다.
  • 새싹교실/2012/개차반 . . . . 3 matches
          * 포인터 개념이나 scanf에서 &가 쓰이는 이유 등 여러가지 keyword에 대해 설명하기 위함
          * 함수 (Function) 들의 집합
          * 이미 존재하는 함수를 가져다 쓰려 할 때 헤더파일을 불러와서 사용한다
  • 새싹교실/2012/아우토반/뒷반/5.11 . . . . 3 matches
         1. 함수
          * 함수의 개념
          * 함수의 종류
  • 새싹교실/2013/록구록구/11회차 . . . . 3 matches
          * 포인터 기초 (재)
          * 포인터란?
          * 기본적인 포인터 연산자들에 대한 설명
  • 새싹교실/2013/록구록구/6회차 . . . . 3 matches
          * 함수란 무엇인가 [Re]
         다시 한번 함수에 대해서 공부해보는 시간을 가졌당
         이번주에는 함수에 대해서 더 자세하게 알아보는 시간이 되었다.
  • 숫자를한글로바꾸기/김태훈zyint . . . . 3 matches
         글구 num2str 요함수.. 걍 수민이한것처럼 배열로 하면 되는데; 괜히 switch로 했다 ㅠㅠ 엉엉
          스위치문 압박이얌..;;ㅁ;; 이게 모햐~~>ㅃ<;;; ㅎㅎ 그거 빼고는 다 이쁘넹!~헤...ㅎ 그런데 말야.^^ 수민이꺼나 네꺼 0넣으면 답이 안나오쟈넝..;;ㅁ;; 0이 불쌍해..ㅠ.ㅜ ㅎㅎㅎ 그거빼고는 다 잘해떵..ㅎㅎ 나도 쓰잘때기없는 그 클래스 뺄껄.ㅎ 괜히 넣었어..편하게 짤려다가 더 복잡해 보이는걸~ㅎ ㅎㅎㅎ 그럼 좋은하루~~>ㅁ<;; - 현태
          나두 언넝 클래스 배워서 소스 좀 깔쌈하게 짜고 싶은데 아직 안배워서 ㅠㅠ - zyint
  • 숫자를한글로바꾸기/조현태 . . . . 3 matches
          소스가 길어 보이지만 저기의 stack이라는 클래스.. 사실 저번에 [LittleAOI]에서 만들어서 2번이나 사용했던 클래스다.
         음;; 그런게 존재하는건 아니구... C언어면 C언어답게 하는 것이 좋구 C++이면 C++답게 코딩하는게 좋은데.. malloc은 C언어에서 쓰이잖아. 물론 C++에서도 쓰이겠지만 C와의 호환성 때문이지 정말로 쓰이는것은 new니까 new를 쓰는게 좋다는거지. 클래스를 malloc으로는 할당 못하거든.
  • 숫자야구/손동일 . . . . 3 matches
         #include<iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
          // int x = rand(); // rand()함수는 랜덤한 숫자를 리턴하는 함수입니다.
  • 시간맞추기 . . . . 3 matches
          * time() 라이브러리 함수 사용.
          * kbhit()함수 사용. - 사용자가 아무키나 눌렀는지 안눌렀는지 알리는 함수.
  • 아젠더패턴 . . . . 3 matches
         아젠더(Agenda)가 없는 스터디 그룹이나 소그룹(SubGroupPattern)은 없다. 이 아젠더는 그룹 목표의 틀을 잡아주며, 멤버들이 일찌감치 준비하도록 해주며 사람들이 참여할 모임을 선택할 수 있는 기회를 준다.
         '''아젠더가 없으면, 그룹은 허전함을 느낄 것이다. 멤버는 스케줄을 정할 수 없으며, 사람들은 모임을 적절히 준비할 시간이 충분치 못할 것이다.'''
         최고의 아젠더는 그룹이 작품을 순차적으로 학습([순차적학습패턴])하도록 짜여진 것이다. 그룹이 작품을 학습하기를 마치면, 그 작품을 원래 학습할 때 없었던 그룹의 새로운 멤버들이 그 작품을 학습할 기회를 갖기를 원할 수도 있다. 이는 학습 주기(StudyCyclePattern)와 소그룹(SubGroupPattern)을 만들어서 수행할 수 있다.
  • 이영호/nProtect Reverse Engineering . . . . 3 matches
         (누군가가 nProtect가 함수를 hooking을 하고, 게임 자체 소스에 포함 되는 것이 아니라 바이너리 형식으로 덧 붙여진다고 하였는데,
         이것을 인라인 패치하였지만, OpenProcess로 디버그 Process를 Hooking하는 함수는 gc_proch.dll에 있다는 것을 확인하였다.
         몇몇개의 함수만을 수정하고 guardcat.exe만 실행하였으나 gc_proch.dll의 hooking 루틴때문에 막혀버렸다.
  • 이차함수그리기 . . . . 3 matches
         === 이차함수 그리기 ===
          * 함수 값을 저장하기 위해 일차원 배열을 사용한다.
          || 조현태 || C/C++ || . || [이차함수그리기/조현태] ||
  • 자료병합하기/조현태 . . . . 3 matches
         함수를 이쁘고 오버헤드적게 쓰려다보니 넣어버렸다. (단순히 함수에 변수명 하나 더적기가 귀찮았을 뿐이다.)
         에이~ 난몰라~ 그냥 클래스로 만들껄 그랫나?ㅎ
  • 정모/2011.3.14 . . . . 3 matches
          * Ice Breaking 때 스펙타클한 거짓말을 썼는데 "달을 다녀왔다" 라고 썼습니다. 물론 고쳤지만요.ㅋㅋ 그리고 이번 Ice Breaking은 시간이 좀 길어진게 흠이지만 참 재밌었습니다. 이번 정모 때 가장 인상적인건 현이의 옵젝C 였습니다. 중간에 "함수 오버로딩은 지원 안하나요?" 라고 물어봤었는데, "언어의 특징 상 지원할 필요가 없다" 라고 현이가 답해줬습니다. 대답을 들으면서 '''"아, 난 그동안 언어의 특징을 너무 무비판적으로 수용한 것이 아닌가?"''' 라는 생각을 하게 되었습니다. '''"객체지향 언어는 당연히 함수 오버로딩을 구현해야 한다"'''는 선입견이 있었거든요. 저에게 심심한 충격이 됐습니다. 다른 OOP Language 중 오버로딩을 구현한 비율이 얼마나 되는지 한번 찾아봐야 겠습니다 ㅋㅋㅋ - [박성현]
          * 솔직히 Ice Breaking할때 저번 주에 한 재미난 일이 생각이 안나서 어떻게 대충 쓰다보니 너무 자명한 거짓말을 써 버렸습니다ㅋㅋ OMS할때 Objective-C에 대해 하나도 몰라서 초반의 Obj-C의 클래스 선언 방법이나 문법에 대해서는 이해를 했지만 뒤에 가서는 이해가 안가는 부분이 대다수였던 것 같네요. ZP책장에 Obj-C 책을 넣어 뒀다고 하니 언젠간 한 번 꺼내서 읽어봐야겠습니다. - [신기호]
  • 정모/2011.4.4 . . . . 3 matches
          * 튜터링 수업은 정규 수업 진도를 꼭 따라갈 필요는 없을 듯 합니다. 작년에 튜터링 수업을 들었던 경험상, 튜터 선배님이 다들 1년동안 배운 C, C++과 공통된 문법은 넘어가고 클래스부터 설명을 하였습니다. 그리고 수업 외에 이때 내가 알았으면 좋았을거다! 싶다 생각한 것을 가르쳐 주셨습니다. map, set에 대한 간단한 설명이나, UML 사용법에 관한 프린트를 뽑아와 알아두면 좋다 하시기도 하고, MVC에 대해 예시를 들어 설명하시기도 하고, 인터페이스를 저그, 프로토스, 테란의 공통된 기능을 묶어 설명하기도 하고... 열심히 연습하며 따라가면 좋았을텐데 저의 성찰일지는 늘 공부를 했어야 했는데...로 끝났다는 게 미스지만요ㅠㅠ([강소현])
          * 도와줘요 ZeroPage에서 무언가 영감을 받았습니다. 다음 새싹 때 이를 활용하여 설명을 해야겠습니다. OMS를 보며 SE시간에 배웠던 waterfall, 애자일, TDD 등을 되집어보는 시간이 되어 좋았습니다. 그리고 팀플을 할 때 완벽하게 이뤄졌던 예로 창설을 들었었는데, 다시 생각해보니 아니라는 걸 깨달았어요. 한명은 새로운 방식으로 하는 걸 좋아해서 교수님이 언뜻 알려주신 C언어 비슷한 언어를 사용해 혼자 따로 하고, 한명은 놀고, 저랑 다른 팀원은 기존 방식인 그림 아이콘을 사용해서 작업했었습니다 ㄷㄷ 그리고, 기존 방식과 새로운 방식 중 잘 돌아가는 방식을 사용했던 기억이.. 완성도가 높았던 다른 교양 발표 팀플은 한 선배가 중심이 되서 PPT를 만들고, 나머지들은 자료와 사진을 모아서 드렸던 기억이.. 으으.. 제대로 된 팀플을 한 기억이 없네요 ㅠㅠ 코드레이스는 페어로 진행했는데, 자바는 이클립스가 없다고 해서, C언어를 선택했습니다. 도구에 의존하던 폐해가 이렇게..ㅠㅠ 진도가 느려서 망한줄 알았는데, 막판에 현이의 아이디어가 돋보였어요. 메인함수는 급할 때 모든 것을 포용해주나 봅니다 ㄷㄷㄷ 제가 잘 몰라서 파트너가 고생이 많았습니다. 미안ㅠㅠ [http://en.wikipedia.org/wiki/Professor_Layton 레이튼 교수]가 실제로 게임으로 있었군요!! 철자를 다 틀렸네, R이 아니었어 ㅠㅠ- [강소현]
          * 음, 이번에 강의실 대여 논의때 "내가 너무 돈을 밝히는 듯한 언행을 해 오진 않았는지"를 생각해볼 수 있었습니다. 답은 "YES"고요....... 자중해야겠습니다. TDD의 경우는, 제가 평소 뭔가를 만들 때(특히 OOPHP Application) 흔히 사용하던 방식이라(클래스를 만들고 밑에 작동 코드를 적은 다음 브라우저로 확인) 조금만 더 노력하면 다른 곳에서도 사용할 수 있을 것 같습니다. 페어 프로그래밍은...... 소현 누님. 결코 누님의 탓이 아닙니다....... <( ºДº)> - [황현]
  • 졸업논문/요약본 . . . . 3 matches
         웹 환경은 이제 하나의 플랫폼으로 자리 잡고 있다. 빠르게 변하는 웹 환경에는 python같은 객체지향 언어가 적당하다. Django는 python으로 만들어진 웹 애플리케이션 프레임워크로, 데이터베이스를 추상화하여 개발자가 기민하게 웹 애플리케이션을 작성하도록 돕는다. Django에서는 기존에 ODBC등을 이용하는 CLI 보다 한 단계 더 높은 수준에서 데이터베이스를 사용할 수 있다. 예를 들어 주언어 python에 클래스를 정의하면 데이터베이스 테이블을 자동으로 생성해주며, 클래스가 변경되면 데이터베이스 테이블도 자동으로 수정해준다. 그 밖에 삽입, 삭제, 수정, 조회 기능을 클래스가 가진 메소드로 추상화하여 주언어 수준에서 데이터베이스를 사용할 수 있도록 한다. 이러한 지원을 바탕으로 웹 애플리캐이션 개발자는 기민하게 프로그램을 작성할 수 있다.
  • 큰수찾아저장하기/김태훈zyint . . . . 3 matches
         문제는 쉬운데 이걸 함수로 나누기가 무지 애매하다 -_-;
         문제는 금방풀고; 이 프로그래밍 함수 어떻게 나눌지 생각한게 한시간 걸렸을듯...
         오오;; 함수나누는 부분이 예술이다 +_+ 나도 써먹어볼까 ㅎㅎ
  • 타도코코아CppStudy . . . . 3 matches
          * [코코아] : for랑 if를 자유롭게 쓰고 싶어요^^. 함수도 자유롭게 쓰고 싶어요. 지뢰찾기, 인수형따라잡기...선희 방 청소 시키기
          * [CherryBoy] : 클래스의 조금더 큰 이해... MFC 랑... 많은 알고리즘 습득...
          * 인수형~ 숙제를 하는데.. 제껀 왜 1학년때 숙제같은지..─_─; 클래스를 넘 안썼나봐요... 으앙~ 구제해주세요~ -- 대근([CherryBoy])
  • 타도코코아CppStudy/0731 . . . . 3 matches
          * 윈도우에 그림을 그려주기 위해서는 DC라는게 필요하다. MFC에서는 DC를 랩핑하고 있는 가장 기본적인 클래스로 CDC를 지원한다. CDC는 그림 그리는 사람의 손이라고 생각하면 된다. 그림을 그려주기 위해 어떤 색깔의 펜이나 붓을 고를수 있을 것이다. 또한 사각형, 원도 그릴수 있다. 이러한 행위들을 CDC의 멤버함수로 정의해놨다. 우리는 그걸 갖다 쓰기만 하면 된다. 세부적인 것은 나중에 알아도 된다.
  • 타도코코아CppStudy/0811 . . . . 3 matches
         최소 한개. 무조건 클래스를 이용하세요. 일단 문법을 익혀야 하니... 또한 될수 있으면 객체지향적으로.
         || ZeroWiki:RandomWalk || 정우||Upload:class_random.cpp . || 왜 Worker가 Workspace를 상속받지? 사람이 일터의 한 종류야?--; 또 에러뜨네 cannot access private member. 이건 다른 클래스의 변수를 접근하려고 해서 생기는 에러임. 자꾸 다른 클래스의 변수를 쓰려 한다는건 그 변수가 이상한 위치에 있다는 말도 됨 ||
  • 토비의스프링3/밑줄긋기 . . . . 3 matches
          * Context는 전달받은 그 Strategy 구현 클래스의 오브젝트를 사용한다.
          * 어떤 클래스든 스프링의 빈으로 등록할 때 먼저 검토해야 할 것은 싱글톤으로 만들어져 여러 스레드에서 동시에 사용해도 괜찮은가 하는 점이다. 상태를 갖고 있고, 멀티스레드 환경에서 안전하지 않은 클래스를 빈으로 무작정 등록하면 심각한 문제가 발생하기 때문이다.
  • 피보나치/김준석 . . . . 3 matches
         /*밑에 pivo함수를 만들어놨기 때문에 우선 여기서
          pivo라는 함수가 있다고 정의*/
          /*pivo(첫번째,두번째,재귀함수에 필요한 감소변수,몇번째구하기에 쓸 변수)*/
  • 하노이탑/윤성복 . . . . 3 matches
          Mcount++; //함수가 호출될때 마다 1씩 증가
          hanoi(disk-1,start,finish,other); // 큰원반을 뺀 위에 것들을 other 기둥으로 옮기는 재귀함수 호출
          hanoi(disk-1,other,start,finish); // other 기둥에 있는 것을 finish 기둥으로 옮기는 재귀함수 호출
  • 하드웨어에따른프로그램의속도차이해결 . . . . 3 matches
          * Game 의 Tick 에 해당되는 함수를 idle에 넣지 말고 타이머마다 화면 그려주는 함수를 실행한다.
          * 스레드 & 1초 쉬고 (이건 HiPerformanceTimer 관련 함수를 이용하는 방법)
  • 황현/Objective-P . . . . 3 matches
         Objective-J의 경우처럼, 클래스의 선언과 정의를 동시에 한다. (사실 PHP의 구조상, 이럴 수 밖에 없다.)
         // 클래스 선언 및 정의
         // 클래스 사용
  • .vimrc . . . . 2 matches
         map <C-F10> gd " 어떤 함수 안에서 지역변수를 추적
         map <F11> ^] " 전역변수/구조체/정의상수/함수정의를 추적
  • 05학번만의C++Study/숙제제출/1 . . . . 2 matches
         섭씨 온도를 전달인자로 전달받아 화씨 온도로 환산하여 리턴하는 사용자 정의 함수를 main() 함수가 호출하는 프로그램을 작성하시오. 프로그램은 섭씨 온도로 입력할 것을 요구해야 하고, 다음과 같은 실행 결과를 출력해야 한다. 참고로, 섭씨 온도를 화씨 온도로 변환하는 공식은 Fahrenheit = 1.8 X Celsius + 32.0 이다.
  • 05학번만의C++Study/숙제제출4/조현태 . . . . 2 matches
          cout << "클래스가 생성되었습니다.\n";
          cout << m_haveInt << "을 가진 클래스가 파괴되었습니다.\n";
  • 2002년도ACM문제샘플풀이/문제A . . . . 2 matches
         // sort 함수는 #include <algorithm> 한다음
         // 그리구 jdValue 이거는 절대값 구하는 함수 같은데
  • 2011년독서모임 . . . . 2 matches
          *[강소현] - 경제에 별 관심이 없어서 그런가 재밌는 책인데도 불구하고 힘들게 읽은 듯 합니다. 이제 슬슬 신경 쓸 나이가 되기는 했는데 걱정이네요 ;ㅁ; 친구들이 치르는 피트 시험이 얼마 안남아서 그런가 의사, 변호사 등등이 되기까지의 과정을 매우 오래 걸리게 하여(가상 그린벨트!) 높은 수익을 유지한다는 점이 눈에 띄었습니다. IBM의 어떤 저가 레이저 프린터 모델과 고급 모델이 똑같은 부품으로 만들어졌다는 점도! 속도를 늦춰주는 칩을 하나 넣음으로써 돈이 있는 사람들이 싼 제품을 안 사도록 막고, 디자인 새로할 필요가 없는 효과를 내다니... 비행기도 이코노미 클래스에 일부러 차별을 주어 똑같이 한 곳에서 다른 곳으로 이동해주는 거임에도, 비지니스 클래스를 선택하도록 만든다는 걸 보고 충격;ㅅ; 쨋든 이동만 하면 된다는 저같은 소시민1은 그냥 싼 거를 이용하면 되겠지요 ~ㅁ~ㅋㅋ 근데 또 커피는 카페모카를 마시는 거 보면 이상한 쪽에서 돈이 새는 거 같기도...?
  • 2학기파이선스터디/if문, for문, while문, 수치형 . . . . 2 matches
         for 문에서 요소의 값 뿐 아니라 인덱스 값도 함께 사용하려면 enumerate() 내장함수를 이용한다(파이썬 2.3 이상). enumerate() 내장함수는 (인덱스, 요소값) 튜플 자료를 반복적으로 넘겨준다.
  • 3DGraphicsFoundationSummary . . . . 2 matches
          * 사용하는 함수 : glEnable(GL_BLEND), glBlendFunc(원본 픽셀에 대한 블랜딩 계수를 계산하는 방식, 대상 픽셀에 대한 블랜딩 계수를 계산하는 방식)
         원본(대상) 혼합 함수
  • 3rdPCinCAUCSE/FastHand전략 . . . . 2 matches
         그동안 [경태]는 A 번 구현 완료. 테스트 데이터를 위해 editplus 로 입력데이터를 test.txt로 작성. DOS 창에서 redirection 으로 프로그램 실행 & 결과 확인. 중간에 5목이 일어난 부분의 첫 위치를 파악하는 부분에서는, 해당 오목 판정결과 함수에서 판정 방향값을 리턴해주는 형태로 함수를 수정, 이를 근거로 첫 위치를 구했습니다.
  • ALittleAiSeminar . . . . 2 matches
         == 주요 클래스 ==
          # 해당 판에 대해 평가하는 함수
  • APlusProject . . . . 2 matches
         오빠가 말한 문서 열어봤는데 클래스 이름이나 함수이름이 안적혀 있어서 적을수가 없었어요;;
  • APlusProject/QA . . . . 2 matches
         || 요구 사항 번호 || 설계 번호 || 구현물 (클래스명) || 구현물 (함수명) || 파일명 ||
  • AcceleratedC++/Chapter1 . . . . 2 matches
         초기화, end-of-file, buffer, flush, overload, const, associativity(결합방식), 멤버함수, 기본 내장 타입, 기본타입(built-in type)
  • ActiveTemplateLibrary . . . . 2 matches
         ATL은 템플릿으로 이루어진 C++ 클래스 집합니다. 이 클래스들은 COM 객체를 프로그래밍하는 과정을 단순화시킨다. VisualC++에서 COM의 지원은 개발자들이 쉽게 다양한 COM객체, Automation 서버, ActiveX 컨트롤들을 생성하도록 해준다.
  • AnEasyProblem/강소현 . . . . 2 matches
          * 클래스 이름은 항상 "Main"으로 해주어야 합니다. 깜찍한 poj 같으니:)
          * printJ 함수 내에서 while(num<bin.length-1)문의 1을 빼주지 않아 bin[num+1]가 index bound of exception이 났었습니다.
  • AppletVSApplication/영동 . . . . 2 matches
          * main() 함수를 반드시 포함한다.
          * 애플리케이션과는 달리 main()함수가 필요없다.
  • AppletVSApplication/진영 . . . . 2 matches
          * "'''Application'''"은 main()함수를 포함하고 있어서 자기 스스로 실행이 되는 반면에
          * "'''Applet'''"은 main()함수 없이 자기 스스로 실행되지 않고 html에 의해 돌아가는 것 같습니다.
  • Barracuda . . . . 2 matches
         Struts와 비슷한 모델 2 형태의 아키텍처 이지만 스트럿츠 보다 발전된 모델 이벤트 통지 메커니즘을 제공한다. 바라쿠다 프레임 워크는 엄격한 JSP접근 방식과 달리 더 뛰어난 유연성과 확장성을 제공할 수 있도록 템플릿 엔진 컴포넌트를 새로 만들었다. 이 프로임워크에서는 사용자 인터페이스를 생성할 때 XMLC를 이용하여 코드와 컨텐츠를 분할한다. XMLC는 자바 기반의 컴파일로써 HTML과 XML문서를 소스로 읽어 들여 컴파일 하고 자바 클래스 파일을 생성한다. 이 자바 클래스 파일은 런타임에 문서를 재생성하는데 이용된다. ...중략... 마크업과 애플리케이션 로직을 분리한 덕에 웹 디자이너는 마크업에, 프로그래머는 코딩에 집중할 수 있다.
  • C++ . . . . 2 matches
         벨 연구소의 [http://www.research.att.com/~bs/homepage.html Bjarne Stroustrup]은 1980년대에 당시의 [C]를 개선해 C++을 개발하였다. (본디 C with Classes라고 명명했다고 한다.) 개선된 부분은 클래스의 지원으로 시작된다. (수많은 특징들 중에서 [가상함수], [:연산자오버로딩 연산자 오버로딩], [:다중상속 다중 상속], [템플릿], [예외처리]의 개념을 지원하는) C++ 표준은 1998년에 ISO/IEC 14882:1998로 재정되었다. 그 표준안의 최신판은 현재 ISO/IEC 14882:2003로서 2003년도 버전이다. 새 버전의 표준안(비공식 명칭 [C++0x])이 현재 개발중이다. [C]와 C++에서 ++이라는 표현은 특정 변수에 1의 값을 증가시키는 것이다. (incrementing이라 함). C++이라는 명칭을 이와 동일한 의미를 갖는데, [C]라는 언어에 증가적인 발전이 있음을 암시하는 것이다.
  • C/Assembly/포인터와배열 . . . . 2 matches
         포인터는 LC1을 가리키므로 메모리에 올려진 변하면 안되는 프로그램영역(CODE 영역)을 가리킨다.
         즉, 배열은 CODE 영역의 포인터와 달리 스택영역에 존재하게 되므로 수정이 가능하게 되는 것이다.
  • C99표준에추가된C언어의엄청좋은기능 . . . . 2 matches
         함수내에서 함수 선언 가능.
  • CNight2011/권순의 . . . . 2 matches
         == Round 1 - 배열, 포인터, 구조체 ==
          * 배열 = 포인터?
  • CProgramming . . . . 2 matches
         함수
          포인터
  • C_Tip . . . . 2 matches
         1. [함수포인터]
  • ComponentObjectModel . . . . 2 matches
         COM 을 처음 공부하고 직접 구현할때에는 모든 것들이 신기해보인다. 팩토리네 스마트 포인터네 스텁-스켈레톤이네 인터페이스네 구현상속과 인터페이스상속은 다르네 등등. 하지만, 동급에 해당되어보이는 Java 플랫폼 내에서의 솔루션들을 보면 너무나 당연한건데 대단하게 표현되어있다거나 (예를 들면 '인터페이스 상속'. COM 책에서는 이걸 왜 무언가 새로운 대단한 기술인 양 서술했을까?) 아에 필요가 없는 기술일 수도 있다. (스마트 포인터 : VM 지원을 받는 플랫폼에선 전혀 필요가 없다.) (물론, 이건 COM 을 설명하던 책들중에 C++ 로 COM 을 구현을 설명하는 책들에 한함)
  • ComputerGraphicsClass . . . . 2 matches
         C++ 코딩에 자신이 없는 사람의 경우 이 책의 맨 앞에 있는 Vector 클래스와 Matrix 클래스 코드를 이용해보기를 권함. 책 설명은 쉬우나 중간중간 설명중 좀 아쉬운 부분이 보이긴 함. (ex : 그래픽스 파이프라인 부분인데 박스 설명은 CPU 파이프라인 설명시의 예 라거나, A* 부분은 설명이 너무 부족)
  • ComputerNetworkClass/Report2006/BuildingProxyServer . . . . 2 matches
         문자열 파싱에서 아주 편리한 함수
         늦은 것 같지만... -_-;; 휘동이에게 말해줬다가 실패한 함수에 대한 내용올림... scanf가 아니라 sscanf 였음
  • ComputerNetworkClass/Report2006/PacketAnalyzer . . . . 2 matches
         WSA prefix 를 가진 함수의 경우 대부분 Winsock 2에서 제공 되기 시작한 것이며, 이 WSAIoctl 역시도 윈속 2에서 지원된다.
         (1) 콘솔로 캡쳐기, 필터, 컨테이너 클래스를 구성한다.
  • Cpp에서의가변인자 . . . . 2 matches
         C의 io 라이브러리인 printf에 쓰이는 그것이다. 또는 MFC - CString의 CString::Format이나 CString::AppendFormat에 쓰이는 그것이기도 하다. 함수 쓸때 ...이라고 나오는 인자를 가변인자라고 한다. 이렇게 하면 인자를 여러개를 받을 수 있다.
         와우 난 저런 메시지 박스 함수가 있는지 몰랐는데~ - 임인택
  • DataStructure/Stack . . . . 2 matches
          * top 포인터는 맨 나중에 집어 넣은 노드를 가르킴.
          * 따라서 데이터가 추가되거나 삭제될때마다 top포인터가 변하겠죠?^^;;
  • DebuggingSeminar_2005/UndName . . . . 2 matches
         DLL 파일에 의해서 분석된 내용을 보면 DLL 에 함수의 이름이 이상하게(?) 변형되어 있는것을 확인하실 수 있는데(DUMPBIN.EXE 를 통해서 가능합니다.) 이 이름의 원형을 알고 싶을때가 있습니다. 그럴때 undname.exe 라는 파일을 사용하시면 아주 쉽게 확인해 보실 수 있습니다.
          ''디버깅 세미나에서는 이러한 함수의 이름이 컴파일 옵션으로 설정되는 map 파일안에 존재하는 것으로 이용하였다.'' - [eternalbleu]
  • Devils . . . . 2 matches
         이 두 단체는 [제로페이지]의 규모가 작아지고, 과거의 시작 멤버 이후로 모임의 강도가 약해지면서 [제로페이지]와 통합하였는데, [데블스캠프]는 [데블스]의 정신을 이어 받은 신입생을 위한 밤새기 세미나로 남아 있다.
         [Devils]의 발음에 대한 토론은 굉장히 많았으며, 창립멤버들이 '''[데블스]'''로 읽기로 결정해서 의견을 존중한다.
  • DiceRoller . . . . 2 matches
         '''프로세스와 주소를 알때 그 주소의 값을 얻어오는 함수'''
         buffer부분에 char형태로 저장이 된다. atoi 함수로 정수로 컨버전하자.
  • DirectVariableAccess . . . . 2 matches
         와드 아저씨의 말로는, '클래스에 아주 적은 양의 메소드만 존재한다면, getter/setter를 추가하는 것만으로도 메소드의 수가 두배가 되어버린다. 이는 전혀 사용되지 않을 유연성을 위해 쓸데없이 갯수를 늘린 것이다.' 라고 한다.
         하지만 이 클래스가 상속이 될 가능성이 있다면, setter/getter를 오버라이딩 해서 사용할수 있으므로, IndirectVariableAccess를 쓰는 것이 괜찮다.
  • DirectX2DEngine . . . . 2 matches
          * 앞으로의 계획 : Timer 및 Animation 클래스의 구현.
          * 계속 구현 : Timer 클래스, 상속을 위한 처리 및 DeviceLost 처리
  • Eclipse와 JSP . . . . 2 matches
         == 이제 클래스를 포함해보자 ==
         F3 : 함수로 이동
  • EightQueenProblem/밥벌레 . . . . 2 matches
         procedure SetQueens(n: Integer); // 퀸 배치하기. 이 소스의 핵심함수. n은 현재 사용안한다. 처음엔 RandomSeed로 쓰려했음..-_-;
         function CheckQueens: Boolean; // 제대로 배치되었는지 검사하는 함수.
  • EightQueenProblem/정수민 . . . . 2 matches
          bool ContraryQueen(); //퀸들을 늘려가는함수
          void MakeQueen(); //퀸을 늘려가기 시작하는 함수
  • EightQueenProblem/최태호소스 . . . . 2 matches
         EQ() 함수에서 return 1 하는 대신 계속 풀도록 하고..
         그리고 메인함수에서 결과 출력하는 루틴은 제거 하였다.
  • ExtremeBear/Plan . . . . 2 matches
          * 함수 : 동사와 명사의 조합으로 이루어지며 첫 단어의 첫글자는 소문자로 시작하고 두번째 단어부터는 대문자로 시작한다 -> (ex testCase)
          * 변수 : 명사와 명사의 또는 동명사와 명사 또는 분사와 명사의 조합이로 이루어지며 멤버 변수, 지역 변수, 전달 인자든 뭐든 상관 없이 첫 단어의 첫글자는 소문자로 시작하고 두번째 단어부터는 대문자로 시작한다 -> (ex backgroundColor)
  • HardcoreCppStudy . . . . 2 matches
          * 멤버를 보면 모두 한가닥(?)하는 나름대로 하드코어.특히 김모양.
          * 우선 첫주는 객체지향을 들어가기 전에 7, 8장이나 함수 사용을 익숙히 하기 위해서 예제를 내겠습니다.
  • HardcoreCppStudy/두번째숙제/CharacteristicOfOOP/김아영 . . . . 2 matches
         객체지향 프로그래밍에서 다형성이란 근본적으로 상속에 뿌리를 두고 있다. 조상 클래스로부터 상속을 받아 새로운 객체들이 파생되어 생성된다. 이때 만약 새객체들이 모두 조상 클래스와 모두 동일한 값만 가지고 있다면 새로운 객체로서 의미가 없다. 왜냐면 그것을 만드는 이유는 무언가 다른 역할을 하기 위해 생성하는 것이기 때문이다. 그래서 다형성이란 조상이되는 객체로부터 상속을 받아 다른 결과물을 산출해 낼때 다형성이라는 의미를 부여할 수 있게 된다.
  • HardcoreCppStudy/첫숙제 . . . . 2 matches
         == 함수의 중복정의 ==
          * 함수의 중복정의(Overloading)에 대해 기술할 것. 예제도 스스로 만들어 보기 // 책에는 재정의라고 나와있음.
  • HardcoreCppStudy/첫숙제/Overloading/임민수 . . . . 2 matches
         함수의 중복정의라 함은
         함수의 이름은 같게 하되 전달인자들의 개수나 형식에 따라 다르게 사용될 수 있도록 정의하는것을 말함..
  • Java2MicroEdition . . . . 2 matches
          그림을 보면 맨 아래에 MID, 즉 휴대전화의 하드웨어 부분이 있고 그 위에는 Native System Software가 존재하며 그 상위에 CLDC가, 그리고 MIDP에 대한 부분이 나오는데 이 부분을 살펴보면, MIDP Application과 OEM-Specific Classes로 나뉘어 있는 것을 알 수 있다. 여기서의 OEM-Specific Classes라는 것은 말 그대로 OEM(Original Equipment Manufacturing) 주문자의 상표로 상품을 제공하는 것이다. 즉, 다른 휴대전화에서는 사용할 수 없고, 자신의(같은 통신 회사의) 휴대전화에서만 독립적으로 수행될 수 있도록 제작된 Java또는 Native로 작성된 API이다. 이는 자신의(같은 통신 회사의) 휴대전화의 특성을 잘 나타내거나 또는 MIDP에서 제공하지 않는 특성화된 클래스 들로 이루어져 있다. 지금까지 나와있는 많은 MIDP API들에도 이런 예는 많이 보이고 있으며, 우리나라의 SK Telecom에서 제공하는 SK-VM에도 이런 SPEC을 가지고 휴대전화의 특성에 맞는 기능, 예를 들어 진동 기능이나, SMS를 컨트롤하는 기능 들을 구현하고 있다. 그림에서 보듯이 CLDC는 MIDP와 OEM-Specific Classes의 기본이 되고 있다.
         컨피규레이션이란 자바 가상머신과 코어 API들에 대한 명세를 의미하고, 프로파일은 그 상위의 클래스 라이브러리, 즉 표준 API 집합에 대한 명세를 의미한다. 이러한 개념적인 분할이 필요한 이유는 메모리와 CPU등의 크기와 성능이라는 측면에서의 요구사항이 동일한 디바이스들의 집합을 하나로 묶어서 컨피규레이션을 정의하고, 이러한 컨피규레이션을 바탕으로 각 디바이스들의 기능, 혹은 버티컬 시장의 요구사항에 맞추어 프로파일을 정의함으로써, 플랫폼의 통일성과 다양성을 동시에 만족시킬 수 있기 때문이다.
  • JavaScript/2011년스터디/JSON-js분석 . . . . 2 matches
          * str함수 내에서 object, object array등을 처리할때 재귀적으로 들여쓰기를 처리해준다. 디테일이 살아있어
          * parse함수를 못 봤다. 다음 시간에..
  • JavaStudy2003/세번째수업 . . . . 2 matches
          * 오버로딩 - C++에서 cin을 cin.get(), cin.get(ch), cin.get(ch,50) 이렇게 쓰는 것처럼 같은 이름의 함수로 비슷한 기능의 역할을 하는 함수들을 만들었다.
  • JavaStudy2004 . . . . 2 matches
          * [JavaStudy2004/클래스]
          * [JavaStudy2004/클래스상속]
  • JavaStudy2004/클래스 . . . . 2 matches
          * 클래스 - OOP를 구현하기 위해 자바에서 사용하는 개념
         === 인간 클래스 만들기 ===
  • JollyJumpers/임인택3 . . . . 2 matches
         위의 코드에 다음과 같이 메시지를 받는 함수를 작성하면, 이 함수를 생성하고 메시지로 리스트를 전달하면 똑같이 이용할 수 있다.
  • JustDoIt . . . . 2 matches
         == 멤버 ==
          * 하욱주 - 우리 최고 핵심 정예 멤버. 한마디로 '주춧돌'
  • LinkedList/세연 . . . . 2 matches
          //스택의 처음을 가르킨는 포인터
          //처음을 가르키는 포인터를 초기화
  • MFC/ScalingMode . . . . 2 matches
         || WindowOrigin || 윈도우의 왼쪽 상당 논리 좌표. CDC::SetWindowOrg() 함수를 호출해서 설정 ||
         || ViewportExtent || 장치 좌표 단위의 윈도우의 크기. CDC::SetViewportExt()함수로 호출 ||
  • NUnit/C#예제 . . . . 2 matches
          1. C# 관련 프로젝트를 만든다. (예제에는 클래스라이브러리)
          1. 테스트 하고자 원하는 Method 에는 Test를, 속한 클래스에는 TestFixture Attribute를 붙인다.
  • NumberBaseballGame/jeppy . . . . 2 matches
         void make_number(char *p); /* 임의 세자리 숫자를 생성하는 함수 */
         void check_num(char *dest, char *src); /* 입력된 숫자와 비밀숫자를 맞춰보는 함수 */
  • OOD세미나 . . . . 2 matches
          * 원래 정말 철저하게 절차지향적으로 프로그래밍 하던 사람이라... 오늘 내용이 좀 어려웠습니다;; 특히 그냥 들을때는 이해하면서 넘어가도, 실제 프로그래밍을 하려니까 막막하더라구요. 마지막 실습때 질문도 했었는데, 형은 if문 안에서 Comparer 객체를 선언해서, equals 함수를 사용하라고 하셨는데, 전 if문 안에서 객체를 생성할 생각조차 하지 못했었거든요. 그저 주어진 정보만 가지고, 반복문을 돌릴 생각뿐이었죠; 그런데 집으로 돌아오면서 생각해봤는데, 제가 짠대로 하면 '''“단일 변화로 인한 수정 사항을 예측 가능한 범위 내에 집중시켜라.”''' 라는 말과는 거리가 한 참 멀어지더라구요;; 예측은 가능한데 예측범위가 프로그램 소스 코드 전~부 라는거죠. 덕분에 "아, 정말 이런거 때문에 OOP를 하라는 거구나" 라는걸 알게 되었습니다 ㅋㅋ
          get과 set을 사용하면 메인에서 그 자료형이 뭔지 알고 있는 거니까 변경시에 같이 변경해야 하므로 사용을 자제하는 건가요? 다른 클래스에서 private로 선언한 거를 메인에서 접근하기 위해 get과 set을 사용하는 거 같은데, 그럴거면 private로 왜 선언하는 건지 의문을 작년에 가졌...는데 여전히 모르는..;ㅅ; 우문(뭔가 질문하면서도 이상해서..;)현답을 기대합니다 ㅎ; - [강소현]
  • OurMajorLangIsCAndCPlusPlus/locale.h . . . . 2 matches
         == 함수 ==
         || 함수 || 설명 ||
  • OurMajorLangIsCAndCPlusPlus/math.h . . . . 2 matches
         == 함수 (FUNCTIONS) ==
         || 함수명(Ascii) || 내용 ||
  • OurMajorLangIsCAndCPlusPlus/signal.h . . . . 2 matches
          === 함수 목록 ===
          || int __cdecl raise(int) || 이 함수를 호출한 프로시져에 첫번째 인자에 시그널번호에 해당하는 시그널을 보낸다. 실패하면 0이 아닌값을 리턴하는데, 오직 유효하지 않은 시그널 번호에서만 실패하게 된다. ||
  • PhotoShop2003 . . . . 2 matches
         || ? || ? || BYTE를 2차원 배열처럼 쓰기 위한 랩퍼 클래스|| 철민 || . ||
         || 11:33 || 11:43 || 2차원 배열 랩퍼 함수 다시 만듬 || 인수 || 10분 ||
  • PluggableSelector . . . . 2 matches
         이런식으로 하나의 메소드만 계속 오버라이딩한다면 서브클래스들의 가치가 없을것 같다. 쉬운 해결책은 ListPane 스스로를 좀 더 유연하게 만드는 것이다. 다른 인스턴스들이 다른 메세지를 보내게 하는 것이다.
         이런 식으로 하면 CenteredRelativePoint, TopLeftRelativePoint같은 서브클래스를 만들 필요가 없다. 위에서 center라는 메세지를 추가한 것처럼, topLeft메세지를 추가만 하면 되는 것이다.
  • ProgrammingPartyAfterwords . . . . 2 matches
         요구분석을 마치고 디자인을 하기로 한 시간이 되었기에 팀원들은 한 테이블에 모였다. 그리곤 CRC 카드를 이용해서 디자인에 들어가기 시작했다. 암묵적으로 ["구근"]님이 ZP#2의 무게중심이 되어서 디자인 회의가 시작되었다. 어떤 클래스들이 필요한가, 어떤 이벤트를 누가 발생시키고 그 이벤트를 누가 알아야하는가에 대한 이야기가 오가는 가운데 ["데기"]는 문제파악 조차 제대로 안되어서 무척 혼란스러웠다. 서로 요구분석 이해에 차이가 있었음에도 불구하고 디자인은 계속 진행되었고, 시간은 계속 흐르고 흘러서 구현을 시작하기로 한 시간을 훌쩍 넘어버렸다.
         멘터인 1002는 '저렇게 하면 나중에 main 함수 어떻게 만들까.. OO Style 이라면 main 루틴 부분이 좀 짧긴 하겠지만, C 라면 좀 힘들지 않을까' 라고 생각, 5시가 가까워지는 4시 20분쯤에 각 모듈 부분을 통합할것을 제안 했다. 통합 중간중 의견 조율을 하는 중간에 ZP#2 멘터인 김창준씨는 두 팀으로 나누어졌을 때 서로 엇갈려서도 Pair 를 바꿔보도록 제안, Moa 의 두 팀은 한명씩 서로 바꾸어보기도 하며 일을 진행해 나갔다.
  • ProgrammingPearls/Column3 . . . . 2 matches
          * 잘 지어진 변수 이름 -> 함수와 데이터의 분리 -> OOP
          * 복잡한 구조는 캡슐화를 하자 -> 클래스
  • ProgrammingPearls/Column4 . . . . 2 matches
          * Functions : precondition - 함수 시작 전에 보장되어야 할 조건 -과 postcondition - 함수 끝날때에 보장되어야 할 조건 -을 명시해준다.(...) 이러한 방법을 "Programming by contract"라 한다.
  • ProgrammingPearls/Column5 . . . . 2 matches
          * 또한 Binary Search의 가장 중요한 전제 조건인 sort되었는가? 체크해주는 함수를 앞에다 써준다. 이 경우에는 search를 한번만 해주면 n + lg n 이렇게 될것이다. 하지만 sort되었는가 체크하는 함수는 한번만 해주면 되므로, search를 한 몇천,몇만번 돌리면 결국 lg n 에 수렴할 것이다.
  • ProjectZephyrus/ClientJourney . . . . 2 matches
          * 소프트웨어 개발이 공장스타일이 될 수 없는 이유를 하나 든다고 한다면 개발중 개발자가 계속 학습을 해나간다는 점에 있지 않을까 한다. 처음부터 끝까지 모든 것을 다 예상하고 개발할 수 는 없을것이니. (필요한 라이브러리가 무엇인지, 실제 그 라이브러리의 장단점이 무엇인지, 어떻게 사용하면 바로 알수 없는 버그가 되어버리는지 등등. 뭐 큰 소프트웨어일 경우 이것을 다 예측해야 한다라고 하면 할말없지만. 이것도 비용을 고려해서 처신해야하겠지. Cost Estimate 자체가 Cost 가 드는것일거니.) 암튼 아쉬운건 중간에 디자인이 바뀌었을때 (실제로 처음 디자인의 클래스들을 몇개 뺀것도 있고, 인터페이스만 맞춰본 것들도 있고 그러함) 바쁜 사람들이 참석을 하지 못해서 처음부터 설명해야 하는 경우이다.
          * TDD 가 아니였다는 점은 추후 모듈간 Interface 를 결정할때 골치가 아파진다. 중간코드에 적용하기 뭐해서 궁여지책으로 Main 함수를 hard coding 한뒤 ["Refactoring"] 을 하는 스타일로 하긴 하지만, TDD 만큼 Interface가 깔끔하게 나오질 않는다고 생각. 차라리 조금씩이라도 UnitTest 코드를 붙이는게 나을것 같긴 하다. 하지만, 마감이 2일인 관계로. -_- 스펙 완료뒤 고려하던지, 아니면 처음부터 TDD를 염두해두고 하던지. 중요한건 모듈자체보다 모듈을 이용하는 Client 의 관점이다.
  • ProjectZephyrus/Thread . . . . 2 matches
          * ''Database Connection Pool 을 사용하던 하지 않던, DB 자원을 얻어오는 부분을 하나의 end point에서 처리하세요. 처음부터 이를 고려하지 않을 경우, '''*.java''' 에서 Database Connection을 생성하고, 사용하는 코드를 머지않아 보게 될겁니다. 이는 정말 최악입니다. pool을 쓰다가 쓰지 않게 될 경우는?다시 pool을 써야 할 경우는? 더 좋은 방법은 interface를 잘 정의해서 사용하고, 실제 DB 작업을 하는 클래스는 Factory 를 통해 생성하는게 좋습니다. 어떤 방식으로 DB를 다루던 간에 위에서 보기엔 항상 같아야 하죠. --이선우 [[BR]]
         Database 관련 부분 아니라 팀 프로젝트시 고려해야 할 사항은 꽤 됩니다. SuccessfulProject 를 위해서 고려해야 할 사항은 어떤게 있을까요? 자세한 내용은 차후 정리해서 쓰기로 하고, 하나 이야기 하고 싶은건 최대한 '''중복'''을 피하도록 하세요. 특히나, 한참 대화를 하지 않고 있다보면 같은 일을 하는 utility성 클래스들을 모두가 하나씩 지니고 있을겁니다.
  • PyIde/SketchBook . . . . 2 matches
         하지만, 손가락 동선의 경우 - ctrl + O 를 누르고 바로 메소드 이동을 한다. 일반 이동도 메소드 중간 이동은 CTRL +커서키. (이는 VIM 에서의 W, B) 위/아래는 커서키. 클래스로의 이동은 CTRL+SHIFT+T. Source Folding 도 주로 Outliner 에 의한 네비게이팅을 이용한다면 별로 쓸 일이 없다. 보통 의미를 두고 하는 행동들은 클래스나 메소드들 단위의 이동이므로, 그 밑의 구현 코드들에 대해 깊게 보지 않는다. (구현코드들에 대해 깊게 보는 경우가 생긴다면 십중팔구 Long Method 상황일것이다.)
  • PythonThreadProgramming . . . . 2 matches
          * 모든 built-in 함수가 다른 쓰레드가 실행할수 있도록 I/O에 대한 block waiting 을 하는 것은 아니다.(time.sleep(), file.read(), select.select()) 은 예상대로 작동한다)
          * lock 상태에 있는 acquire() 함수에 대하여 interrupt 하는것은 가능하지 않다. (키보드 인터럽트도 lock을 얻고 나서야 일어난다.)
  • RandomWalk2/상규 . . . . 2 matches
         // 메인 함수
         // Walk 하는 함수
  • RealTimeOperatingSystemExam2006_2 . . . . 2 matches
          c) OSMemCreate 관련 한문제. 함수 바디를 쓰라는건지, 함수호출부분을 작성하라는것인지는 정확히 기억안남.
  • STL/Miscellaneous . . . . 2 matches
          * vector<Object*> 이런식으로 동적 생성하는 객체의 레퍼런스를 위한 포인터를 컨테이너에 넣을때는 추후 포인터가 가리키는 객체를 직접 delete 해줘야 한다.
  • STL/VectorCapacityAndReserve . . . . 2 matches
         ["STL/vector"] 의 capacity 와 reserve 함수의 예
          cout << "STL Vecotr의 capacity와 reserve에 대한 함수 수행을 보입니다."
  • STLErrorDecryptor . . . . 2 matches
         VC++를 가지고 STL 프로그래밍을 하시는 분들이 가장 많이 느끼는 불편함(어느 플랫폼이나 마찬가지이지만)중 하나가 바로 "'''에러 메시지에 나타나는 STL 컴포넌트가 무엇인지 도통 모르겠다'''"라는 점일 겁니다. 이는 컴파일러가 STL 템플릿을 인스턴스화할 때 타입 매개 변수가 모두 포함된 상태로 전체 이름을 써 버리기 때문에 STL 책에 나오지도 않는 클래스 이름과 템플릿 이름 등이 마구 튀어나옴은 물론이거니와, 인스턴스화한 클래스 이름 자체가 엄청나게 길어져서, 코드 한 줄에 대한 에러 메시지가 수십 여 줄까지 만들어지는 현상이 일어나지요.
  • Slurpys/곽세환 . . . . 2 matches
          * 예전같으면 일일이 만들었을 함수들을 그냥 string 함수로 해결
  • SpiralArray/임인택 . . . . 2 matches
         각 방향별로 포인터가 이동하는 회수를 세는 방법으로 만들어봄.
         이런 순으로 배열이 되게 되는데, (시작점과 끝점을 제외하고) 포인터의 이동방향을 나열해보면 →→→ ↓↓↓↓↓ ←←← ↑↑↑ →→ ↓↓ ← ↑ 순으로 된다. 여기에는 간단한 규칙성이 생기는데 (첫줄의 움직임을 제외) 다음과 같은 수식으로 포현될 수 있다.
  • StarCraft . . . . 2 matches
         내가 1학년때 C++을 배우면서 클래스를 이해하는데 상당한 어려움을 느꼈다.
         그때 한 선배(오기정)가 클래스에 대해 설명하면서 스타크래프트를 예로 들어주셨고 나를 비롯한 많은 사람들이
  • TAOCP/BasicConcepts . . . . 2 matches
         f는 Q에서 Q 자기자신으로 가는 함수이다
          두 순열을 곱한다. (합성함수와 비슷하다.)
  • TddWithWebPresentation . . . . 2 matches
         즉, 일종의 Template Method 의 형태로서 Testable 하기 편한 ViewPageAction 의 서브클래스를 만들었다. 어차피 중요한것은 해당 표현 부분이 잘 호출되느냐이므로, 이에 대해서는 서브클래스로서 텍스트를 비교했다.
  • TeachYourselfProgrammingInTenYears . . . . 2 matches
         적어도 반다스의 프로그램 언어를 배우는 것.그 중의 하나는 클래스 추상을 서포트하는 것(예를 들면 Java 나 C++), 하나는 함수 추상을 서포트하는 것(예를 들면 Lisp 나 ML), 하나는 구문 추상을 서포트하는 것(예를 들면 Lisp), 하나는 선언적 기술을 서포트하는 것(예를 들면 Prolog 나 C++ 템플릿), 하나는 coroutine 를 서포트하는 것(Icon 나 Scheme), 그리고 하나는 병렬처리를 서포트하는 것(예를 들면 Sisal)인 것.
  • TellVsAsk . . . . 2 matches
         만일 당신이 각 클래스들의 책임에 기반한 디자인으로 시작했다면 이러한 함정에 탈출하는 일은 쉽다.
         만약 그들의 책임(의미)에 기반해서 클래스 설계를 시작한다면 이런한 덫에서 벗어나기에 더 쉽다.
  • TestDrivenDevelopment . . . . 2 matches
         테스트를 작성할때엔 '이미 완성되어있는 잘 된 API' 를 상상하며 작성한다. 잘 만들어진 API는 같은 일을 하더라도 직접 호출해줘야 하는 함수의 갯수가 적고 이해하기 편하며 '무엇'을 해주는지 그 메소드가 말해준다. 적게 코드를 써도 많은 일을 해주는것이다. 그리고, 테스트로서 컴퓨터의 컴파일러에게 코드작성을 위해 해야 할 일들을 묻고, 인터페이스를 만들고. 그리고 구현하고, 다시 구현된 코드를 Refactoring 한다.
         === 간단한 C++ 에서의 TDD 참고 함수 ===
  • TkinterProgramming/HelloWorld . . . . 2 matches
         # 함수 기반
         # 클래스 기반
  • ToyProblems . . . . 2 matches
          - 창준 - Higher Order Programming과 로우레벨에서의 설명(예컨대 단순한 함수 포인터로 설명하는 것)의 차이는 미묘하고, 또 크다. 동사(달리다)를 명사(달림)의 품 안에 넣는 것이다. 이 사고에서 엄청난 차이가 생길 수 있다.
  • UDK/2012년스터디 . . . . 2 matches
          * [http://udn.epicgames.com/Three/MasteringUnrealScriptClassesKR.html 언리얼 마스터하기: 언리얼스크립트 클래스]
          * [http://udn.epicgames.com/Three/MasteringUnrealScriptFunctionsKR.html 언리얼 마스터하기: 언리얼스크립트 함수]
  • VMWare/OSImplementationTest . . . . 2 matches
         읽어서 특정 메모리 번지에 로드한 후 그 시작 함수 (엔트리 포인트 함수)로 점프하게
  • WERTYU/1002 . . . . 2 matches
          필요한 함수들로는..
          이 부분에 대해서는 함수로 빼낼 것이고, 이를 스트링화 하면 최종 프로덕트.
  • WebLogicSetup . . . . 2 matches
          <servlet-class>com.tagfree.access.SOAPAccess</servlet-class> <!-- 실제 서블릿 클래스 -->
         +----- 서블릿 수행 <----------------------------- <servlet/>에 따라 실제 서블릿 클래스와 매핑 <--+
  • WindowsConsoleControl . . . . 2 matches
         터보 C를 사용할때는 라이브러리로 콘솔제어를 쉽게 하는 함수들이 존재하였다. MS의 콘솔을 배제하는 정책 때문인지 함수는 존재하지만, 불편한 인터페이스를 그대로 유지하고 있는데, 이를 살작 추상화 시키는 간단한 소스들이다.
  • XMLStudy_2002/Resource . . . . 2 matches
          XML 파서,XSL 프로세서,DOM 라이브러리, XSLT 프로세서(예를 들어서 만약 Java로 된 API를 지원한다면 XML 파싱기능을 해주는 Java 클래스들을 패키지로 묶어둔 Java 클래스 패키지라는 형태로 제공된다)
  • XpQuestion . . . . 2 matches
         - ["1002"] 가 ProjectPrometheus 를 할때엔 거의 전체 작업을 Pair로 진행했다. Integration 비용이 전혀 들지 않았다. (두명이 멤버였으니; 당근!) 그리고 초기 소스와 지금 소스중 초기 모습이 남아있는 부분을 보면 '젠장. 왜 이렇게 짠거야? 이런 허접한...' 이다. 중복된 부분도 많고, 매직넘버도 남아있고, 처음엔 쓸거라 생각했던 일종의 어뎁터 역할을 하는 클래스는 오히려 일만 복잡하게 만들고 등등.
  • Yggdrasil/가속된씨플플 . . . . 2 matches
          * 1장을 공부하면서 자바의 string 클래스와 비슷하다는 것을 느꼈다. 이걸 먼저 알았으면 1학년때 숙제할 때마다 char 배열을 포함한 클래스를 만들 때 수고를 좀 덜했을 거 같다.
  • ZeroPageServer/Log . . . . 2 matches
          * JSP에서 자바빈을 써야하는데 WEB-INF에 classes에 클래스를 넣을수가 없어서그러는데 어떻게 쓸수 있게 해주세요. --["광식"]
          ''간단한 resin log analyzer를 만들어두었습니다. admin 안쪽 RLA.jsp로 확인바랍니다. 참, resin이 root 계정으로 동작하던데, 권한을 바꾸길 바랍니다. (권한을 바꿔줄때, 그 부산물 - jsp가 컴파일된 자바 소스나 클래스등 - 도 함께 권한을 바꿔줘야 합니다.)''
  • [Lovely]boy^_^/USACO/WhatTimeIsIt? . . . . 2 matches
          * 좀 잡다한 함수가 마니 들어갔군..
          * 자주 만들어서 쓰는 함수는 라이브러리화를 해야겠다
  • code regulation . . . . 2 matches
         == 함수 ==
         == 클래스 ==
  • django . . . . 2 matches
          * [http://www.mercurytide.com/knowledge/white-papers/django-full-text-search] : Model 의 Object 에 대한 함수들 사용방법
          * [http://www.b-list.org/weblog/2006/06/13/how-django-processes-request] : Template 에서의 변수 참조에 대한 설명. 필수!!, 리스트나, 맵, 함수등에 접근하는 방법
  • erunc0/COM . . . . 2 matches
          * 간단한 C++ 클래스로 시작하여 재사용 가능한 이진 Component로써 클래스를 사용하는 법을 간단한 예제를 통해서 배우게 된다. 처음은 DLL을 통해서 client 에게 제공하는 문제에 대해 말하며. 다음에는 이렇게 제공되어진 컴포넌트에 대한 방화벽(?)등에 대해 논의 하면서 인터페이스를 통하여 컴포넌트 내의 은닉화를 위한 방법들을 설명해준다. 그리고 그다음으로는 abstract class를 사용해 (virtual function을 이용한 방법) 인터페이스의 확장에 관한 부분까지 설명한다. 그리고 끝으로는 RTTI 이용하여 더 나은 인터페이스의 확장 방법과 다중의 client 에게 컴포넌트를 제공할수 있게 만드는 부분까지 설명한다. 한서라서 그런지 애매한 용어들이 많이 있어서 아직도 이해가 가질 않는 부분이 많았다. 한번더 chapter 1응 읽은 후에 정리하고 chapter 2로 넘어가야 하겠다.
  • html5/drag-and-drop . . . . 2 matches
          * 드래그 중 마우스 포인터가 요소와 겹치는 순간 호출되는 이벤트이다.
          * 드래그 중 마우스 포인터가 요소 위를 가로지를때 단속적으로 발생하는 이벤트이다.
  • html5/web-workers . . . . 2 matches
          * 지역변수, 지역함수이므로 외부에서 호출 불가!
          // 전역함수 postMessage 사용
  • whiteblue/MyTermProjectForClass . . . . 2 matches
         == 클래스 입력 ==
         === 메인 함수 ===
  • 겨울방학프로젝트/2005 . . . . 2 matches
         || [AI오목컨테스트2005] || 각자 작성한 AI 오목끼리 대결, 현재 현태, 상협이 만든 두개가 있고 [MFCStudy_2005_2_야매] 스터디 멤버들이 이어서 만들거라 기대함 || 상협 현태 태훈 민경 ||
         || Blog || PHP로 SQL로, 간단하게 기본기능 -> JSP || 예전 그 멤버 + ||
  • 경시대회준비반/BigInteger . . . . 2 matches
         C++ 용 BigInteger 클래스로 거의 모든 연산을 지원한다. UVA 사이트의 구식(?) 컴파일러에도 문제없이 통과할 뿐 아니라, 성능또한 훌륭하다. 고정도 정수 연산을 하는 문제의 경우, 고정도 연산을 하는 라이브러리를 본인이 직접 짜거나, 이 클래스를 이용하면 된다. 몇 일동안 삽질한 결과 후자가 낫다는 판단이 선다. 되게 잘 짜여진 코드다. 시간 내서 분석해봐야 겠다.
  • 경태 . . . . 2 matches
          * 컴공, 99, 박경태, 80.9.2, mokhigh7, ZeroPagers, 손짓사랑, Netory 시니어, SSM멤버
          [http://NeoM7.ssm.samsung.co.kr 멤버십위키] (죽어있음..)
  • 고한종/배열을이용한구구단과제 . . . . 2 matches
          * 우연히 들어와서 봤는데 fflush()는 output stream에 사용하도록 만들어진 함수고, fflush(stdin)은 MS의 컴파일러에서만 지원하는 거라서 linux쪽에서는 작동하지 않는다고 하니까 그것도 알아두는 것이 좋지 싶어요. - [서민관]
          * 조금 더 찾아봤는데 input stream을 비우는 표준 함수는 없다는 것 같네요. 이식성 등을 생각하면 이런 코드를 쓰는 걸 생각해보는 것도 좋을지도. - [서민관]
  • 고한종/십자가돌리기 . . . . 2 matches
         이 구조가 반복 되는데 이걸 함수로 선언 할 순 없을까?
          * 함수선언 + for문으로 하는데 거의 성공했다. (숫자가 어려워서 *로 도전중이다.)
  • 그래픽스세미나/3주차 . . . . 2 matches
          * 벡터 클래스 만들기
         최태호의 벡터 클래스 입니다. 참고 하세요.
  • 김재현 . . . . 2 matches
         ------포인터 실습-----------
         포인터에 대한 이해가 아직 부족해서 스스로 코드를 짜진 못하고,교수님이 올리신
  • 김태진/Search . . . . 2 matches
         봉봉교수님이 내주신 연습문제에는 하나밖에 찾을 수 없는 구조인데, 함수에 check라는 static variable을 추가해서 그 함수가 호출되었을때 처음 찾은 값 다음부터 탐색하도록 하였습니다. thanks to. 힌트를 준 진경군.
  • 김희성/MTFREADER . . . . 2 matches
          int LastErrorCode(); //최근에 일어난 클래스 내부의 에러를 반환한다.
          point=*((unsigned short*)((unsigned char*)$MFT+20));//Offset으로 포인터 이동
  • 데블스캠프2002/Afterwords . . . . 2 matches
          * 피곤 했다. ㅠㅜ, 그리고 데블스캠프가 내가 보기에는 괜찮았던거 같다. 내가 1학년때 이런 캠프가 있었다면 지금 보다 더 나은 내가 있었을지도 모른다는 생각도 들었다. 그리고 기초가 부족했던 나도 데블스 캠프를 통해서 몰랐던거 많이 배웠다. ㅡㅡ;, 특히 지금에서야 말하지만 그때 이중 포인터는 나도 한번도 안써봤고 생각도 안해 봤던 것인데 그것을 신입 회원 들에게 설명을 해줬다. ㅠㅜ 아 찔린다. 그런데 역시 설명하는 입장이 되니깐 이해가 더 팍팍 되는거 같다. 긴장을 해서인지(아마 이중 포인터 설명 나올때부터 긴장해서 듣었는지도 모른다. 나중에 그것을 설명해줘야 할 입장이 될테니..) 써본적도 없었지만 마치 많이 써본것 처럼 설명을 해줬다. 그래도 틀리게는 설명 안해준거 같다. (이게 과외의 노하우 일지도.. 위급한 상황에서는 인간의 능력은 한없이 향상되는거 같다.) 음, 하여튼 데블스 캠프때문에 집에도 늦게 내려가고 기숙사도 빠져서 기숙사에서 잔소리좀 듣었지만, 나에게는 좋은 경험이었다. - 상협
  • 데블스캠프2004/금요일 . . . . 2 matches
          -> 윈도우 창에서 그리는 부분을 담당하는 함수이다.
         ===== 마우스를 클릭했을 경우 paint 함수를 호출 =====
  • 데블스캠프2006/월요일/연습문제 . . . . 2 matches
         [데블스캠프2006/월요일/함수/문제풀이]
         DeleteMe) 함수 파일다운은 [데블스캠프2006/월요일] 로 이동시켰습니다.
  • 데블스캠프2006/월요일/연습문제/웹서버작성/변형진 . . . . 2 matches
          * 내가 PHP 도 약간 해보고, JSP 나 Java 도 약간 해봤서 대충 심정을 알듯.. 나도 JSP랑 Java 써서 이번에 DB 프로젝트 개발 해보기전에는 웹에서는 PHP로 짜는게 가장 편하게 느껴졌었거든. 그래서 DB 프로젝트도 웹은 PHP 응용은 Java 이렇게 해 나갈려고 했는데 PHP가 Oracle 지원은 버전 5.x 부터 되서 걍 Jsp로 하게 됐지. 둘다 해본 소감은 언어적인 면에서는 뭐 PHP로 하나 Jsp로 하나 별 상관이 없는거 같고, 다만 결정 적인것은 개발환경및 Jsp 에서는 java 클래스를 가져다가 사용할수 있다는 점이었스. Jsp에서 하면 Junit 을 사용하여 Unit 테스트를 하면서 작성하기 수월했고, 또한 디버깅 환경도 Visual Studio 에서 디버깅 하듯이 웹을 한다는게 정말 좋았지. 또 java 클래스를 가져다가 사용할 수 있어서 여러 오픈 소스를 활용하기에도 좋고.(예를 들면 Lucene 같은 자바로 만든 오픈소스 검색 엔진..). 특히 Eclipse 라는 강력한 개발 환경이 있어서 Visual Studio 보다 더 개발이 수월할 정도..
  • 데블스캠프2006/월요일/함수/문제풀이/김준석 . . . . 2 matches
         == 실미도 함수 만들기 (몸통은 자유) ==
         [데블스캠프2006/월요일/함수/문제풀이]
  • 데블스캠프2006/준비/화요일 . . . . 2 matches
         구조체, 파일 입출력, 포인터(메모리), 디버깅
         || 19:30 ~ 21:00 || 포인터 + 예제 || 아영 선호 ||
  • 데블스캠프2009/화요일후기 . . . . 2 matches
          * '''서민관''' - 자바로 로봇을 움직이는 시간이었는데, 역시 코드를 짜서 그것이 무언가를 하는 것을 볼 수 있다는 것은 꽤나 괜찮은 경험이었습니다. 좀 아쉬웠던 점은 어떤 변수나 함수가 있는지를 확실하게 몰라서 괜찮은 물건은 만들지 못 했다는 점이네요. 그리고 제 탱크가 너무 약했다는 점하고...
          * '''서민관''' - 개인적으로 이번 화요일 수업에서 가장 마음에 드는 수업이었습니다. 이런 식으로 시간의 흐름에 따라서 추상화 개념이 발전하는 모습을 보고 있으니 참 대단하다는 생각이 들었습니다. 그리고 반복을 줄이기 위한 방법들(ex - 반복문, 자료형, class) 각각이 무엇을 위해서 만들어졌는지를 알아보는 것으로 평소에 아무 생각 없이 썼던 것을 다시 한 번 생각해 보는 기회가 되었습니다. 그리고 수업을 듣고 나니 추상화를 통해서 긴 프로그램 코드를 각각의 함수로 쪼개는 방법이 왜 중요한지도 조금 더 잘 알겠네요.
  • 데블스캠프2010/다섯째날/ObjectCraft . . . . 2 matches
         2. 구조체에서 클래스
         5. 상속과 가상함수
  • 데블스캠프2011/넷째날/Git/권순의 . . . . 2 matches
          // 커맨드를 비교하여 적절한 커맨드 함수를 받는다.
          // 커맨드 함수 호출
  • 데블스캠프2011/넷째날/루비/서민관 . . . . 2 matches
         어쨌든 이걸로 클래스도 만들고 멤버변수도 만들고 메소드도 만들었으니 기본적으로 필요한 기능은
  • 데블스캠프2011/셋째날/String만들기/서지혜 . . . . 2 matches
          C++로 Java의 String 클래스 구현하기
          * 메인함수
  • 데블스캠프2011/첫째날/개발자는무엇으로사는가 . . . . 2 matches
          * 1학년 기준으로 일단 질문자의 질문에 달려있는거 같아요. "포인터가 뭐냐?"(x) "포인터 이거 여기서 왜틀린거지?"(o)라는 느낌요? 전자면 대답자체를 회피할거고, 후자면 최대한 자세히 설명하려고 노력하겠지요. -[김태진]
  • 데블스캠프2011/첫째날/후기 . . . . 2 matches
          * 앗 이 후기를 쓰지 않았다니! 자바를 처음으로 제가 코딩해볼 수 있었던 시간이었습니다. 전날까지 잘 몰랐던(ㅋㅋㅋㅋㅋㅋㅋ) '박' 성현이 형과 같이 진행했죠. 누구랑 같이 할지 선택하라고 했을때 성현이형을 보자마자 찰나의 고민도 없이 '아! 성현이형이랑 해야겠군!' 이라는 생각이 들엇달까요 ㅎㅎㅎㅎ. 개인적으로 지금은 새발의 피만큼 클래스와 객체의 개념에 대해서 좀 더 이해되는거 같습니다. 책보며 공부하고 있는데도 아직 어려움이 많네요. JUnit이라는 (뒤에가서 TDD도 배웠지만) 분산해서 프로그램 짜는걸 실습해볼 수 있어서 좋았습니다. 세미나가 3시간인게 정말 아쉬웠지요 ㅠㅠ 좀 더 시간이 많아서 많은걸 들을 수 있었다면 좋았을텐데 라는 아쉬움아닌 아쉬움이 남는 지원누나의 최고의 세미나였습니다.
          * 데블스 캠프를 낮밤을 함께 하자 제안했었는데, 어쩌다 보니 낮 시간인 날에 참가 못하게 되버렸지요 ㅠ.ㅠ SE 팀플을 할 때 svn을 써보긴 했지만.. 폴더 단위로 이동시키다가 supclipse로 하니 좋았어요:) 동시다발적으로 하려다 보니 충돌이 많이 나서 잘 안될 줄 알았는데..마지막에 프로그램이 돌아가는 걸 보고 감동적이었던! 처음에 클래스 선언 타입이나 그런 준비를 하는 것이 얼마나 중요한 지 깨달았어요.
  • 데블스캠프2012 . . . . 2 matches
          || 1 |||| [:데블스캠프2012/첫째날/배웠는데도모르는C 배웠는데도 모르는 C] |||| 웹 서비스구축 전반에 관한 이야기 |||| 점심? |||| |||| [http://zeropage.org/seminar/62072 재귀함수를 이용한 문제 해결] |||| [http://zeropage.org/seminar/62080 C로배우는 C++의원리] || 8 ||
          || 2 |||| 배웠는데도 모르는 C |||| 웹 서비스구축 전반에 관한 이야기 |||| [http://zeropage.org/seminar/62041 소켓, 웹, OpenAPI] |||| |||| 재귀함수를 이용한 문제 해결 |||| C로배우는 C++의원리 || 9 ||
  • 데블스캠프2012/셋째날/후기 . . . . 2 matches
          * [서민관] - 새삼 드는 생각이지만 황현은 전문적인 지식이나 프레젠테이션 솜씨나 어디 하나 빠질 데가 없는 것 같네요. 몇몇 1학년들이 몰라서 대답하기 곤란했던 개념적인 용어들도 정확하든 정확하지 않든(드립이든) 뚜렷하고 날카롭게 가르고 가는 느낌은 들으면서 상당히 감탄했습니다. Block이라... 개인적으로는 비표준이라는 단어가 정말 찝찝하긴 한데, 표준으로 정립되면 좋겠다는 생각이 듭니다. C에도 함수 객체가 들어오면 좋겠죠.
          * [안혁준] - 땜방용티가 많이 났나요? 사실 canvas는 아무리 생각해도 설계를 잘못한것 같아요. 도무지 API들이 바로바로 떠오르지 않아요. 거기다가 왠지 함수 일것 같은데 문자열로 넣어줘야 하는 부분들도 있고요. 딱히 canvas는 아니지만 [https://developer.mozilla.org/ko/demos HTML5을 활용한 예제]를 보면 신선한 느낌일듯 하네요.
  • 데블스캠프2012/첫째날/배웠는데도모르는C . . . . 2 matches
          * 간단한 일정 관리 프로그램(?) 만들기로 배워보는 구조체, 함수 포인터....
  • 레밍즈프로젝트 . . . . 2 matches
         || [레밍즈프로젝트/유주호] || 프레임 부분 프로토타이핑, 레밍 클래스 제작 ||
         || [레밍즈프로젝트/박진하] || 자료구조 프로토 타이핑, 맵 클래스 제작 ||
  • 몸짱프로젝트/BinarySearchTree . . . . 2 matches
          * 할일 : Delete 함수 리펙토링하기, parent 포인터 없애기
  • 몸짱프로젝트/CrossReference . . . . 2 matches
         // Cross Reference를 작성하기 위한 함수
         string toString(int aNum) // 줄수를 string 객체로 바꾸는 함수
  • 문자반대출력/Microsoft . . . . 2 matches
         n byte 문자를 뒤집기 위해 또 다른 n byte 의 버퍼가 필요하지 않군요. 1 byte 의 ch 변수와 포인터 두개면 되겠군요. '포인터 연산'에 익숙해지면 좋을 것 같네요. --[이덕준]
  • 문자반대출력/조현태 . . . . 2 matches
         클래스도 써봤는데.. 본인이 보기에는 이쁘지만..^^ 남이 보기에는 영~~(아직 클래스를 못배웠다..ㅠ.ㅜ 2학기가 되어야 할텐데..ㅠ.ㅜ)
  • 문자반대출력/허아영 . . . . 2 matches
         그리고 char 함수를 처음 사용해서. 처음에 에러도 많이 났다.
          비베에서는 한글이나 일본어처럼 2바이트를 사용하는 글자의 경우 알아서-_- 판단하고 한 글자 단위로 읽는 함수가 있긴 한데 씨에서는 알파벳과 같은 1바이트 문자인지 아니면 2바이트 문자인지를 어떻게 구분해야 할까요? -태훈 [zyint]
  • 문제풀이 . . . . 2 matches
         덧2. 멤버를 꾸려보니 넷토리 멤버가 굉장히 많네요.
  • 반복문자열/이강희 . . . . 2 matches
         [반복문자열/허아영]을 읽어보세요. 함수를 이해하는데 도움이 되는 내용이 들어있습니다. 함수가 무엇일까요? -- [Leonardong]
  • 비행기게임 . . . . 2 matches
          * 행동 함수 만들기, 적기 미사일 나가게 하기
          * 충돌 모듈 -> 이것이 좀 복잡할거라고 생각했는데 pygame에서 처리하는 함수 있음 ㅡㅡ;
  • 비행기게임/진행상황 . . . . 2 matches
          * 7.27 : 적기의 행동 패턴 함수 작성, 행동 패턴은 파일에서 읽어 들임.. 행동패턴 맘대로 추가 가능.
         || 8.2 || 인수, 상협, 재동 || 클래스 디자인 ||
  • 빵페이지/숫자야구 . . . . 2 matches
          game(); // 게임함수 시작
          new_game(); // 정확히 맞췄을 경우 new_game함수로 이동
  • 삼총사CppStudy . . . . 2 matches
         || 클래스 || 손동일 || 7/31 || ★★☆☆☆ ||
         || 상속, 가상함수 || 이선호 || 8/14 || _ ||
  • 삼총사CppStudy/20030806 . . . . 2 matches
          * 함수, 연산자의 오버로딩
          * friend 함수를 위해서는 VS 6.0 sp 5를 깔아야 한다.[http://download.microsoft.com/download/vstudio60ent/SP5/Wideband-Full/WIN98Me/KO/vs6sp5.exe]
  • 상협/Diary/7월 . . . . 2 matches
         || ["비행기게임"] || 행동 클래스 30% 정도 하기 || 0% || 불행히도 ||
         || ["비행기게임"] || 행동 클래스 || 100% || 오케. ||
  • 새싹교실/2011/學高 . . . . 2 matches
          * [김세영]: 함수 전까지는 좀 쉬웠는데 함수로 넘어오니까 난이도가 높아진 것 같다.
  • 새싹교실/2011/學高/8회차 . . . . 2 matches
          * 컴파일은 안 해봤지만 함수 원형 선언 시 매개변수의 타입은 왜 써주지 않았는지 궁금하네요. 받을 때는 num으로 받고 쓸 때는 n으로 쓴 것도; 그리고 전역 변수를 안 써도 리턴 값을 통해 카운트 충분히 할 수 있을 것 같은데... - [김수경]
          * 음... 헤더는 제가 실수한거구요. 하노이의 탑을 짤 때 제대로 짰는지 확인해보라는 의미로 count를 넣었기 때문에 굳이 함수의 형태를 건들기보단 전역변수를 임시로 선언해서 쓰는것이 더 좋을 것 같아서 이렇게 작성했습니다. - [윤종하]
  • 새싹교실/2011/무전취식/레벨10 . . . . 2 matches
          * strlen()함수의 사용에 대해 알아봤죠
         // 분리된 단어 출력 함수
  • 새싹교실/2011/무전취식/레벨3 . . . . 2 matches
          * printf()와 scanf()함수의 쓰임에 대해 말해주었습니다. %c %d %l %f %%등등.
          - 함수에 대해 알아볼것입니다.
  • 새싹교실/2011/무전취식/레벨5 . . . . 2 matches
          * 함수는 input과, 내부 동작, ouput으로 이루어져있습니다. 함수의 return 타입과 return은 꼭 맞추어야합니다.
  • 새싹교실/2011/앞반뒷반그리고App반 . . . . 2 matches
          * 오늘은 포인터를 배웠어요. ********별-. 선언할 때 int *a;로 선언하게 되면 *a는 a의 주소에 있는 값을 나타내는거였지요. 음.. 하다가 현 형이 하던 프로젝트에 잠깐 지워놓고 예시를 들었다가 xcode를 끄는 바람에 소스가 날라가버렸지요.... 포인터가 있으면 지정된 크기보다 큰 용량의 자료도 불러오기 쉽다는 것도 배웠구요. 아무튼 유용하게 쓸 수 있을거 같아요 -[김태진]
  • 새싹교실/2012/아무거나/3회차 . . . . 2 matches
          * 함수(function)와 프로시저(procedure)
         자릿수들을 나누는 것. 그것들을 더하는 것,함수를 만들어서 쓰는 것, 실행의 결과를 다른 파일로 출력하는 것도 배웠는데 몇 시간 지나니까 또 까먹었다. 헐ㅋ. 난 금붕어인가보다. 운지↓↓
  • 새싹교실/2012/열반/120604 . . . . 2 matches
          * 정수 n과 k를 입력 받아서 n의 k승을 반환하는 함수를 작성하세요.
          * 어떤 정수를 저장하는 변수의 주소를 넘겨서, 그 값을 k승하는 함수를 작성하세요.
  • 새싹교실/2012/절반/중간고사전 . . . . 2 matches
          *함수 여러가지 썼을때 순서
          * 함수들 문법 정리한것
  • 새싹교실/2013/라이히스아우토반/7회차 . . . . 2 matches
          * 포인터에 대해 설명을 들었죠.
         반성하는 태도를 가져야 하겠지만, 안타깝게도 앞으로도 수업준비는 잘 못해 갈 것 같다. 애들이 남은 흥미를 다 잃어버리기 전에 적어도 구조체랑 함수 만드는 법, 파일 입출력은 가르쳐야 할텐데...
  • 새싹교실/2013/록구록구/10회차 . . . . 2 matches
          * 포인터 기초
          * 포인터 기초
  • 새싹교실/2013/양반/6회차 . . . . 2 matches
         함수에 대한 이해가 증진되었음 n! nCr을 짤수 있음.
         재귀함수를 잘 쓸 수 있을것 같다.
  • 서지혜 . . . . 2 matches
          * 계산기니까 역시 함수형 언어를 쓰면 좋겠네!
          * [java/reflection] - java의 classLoader와 reflection을 이용해 외부 클래스 메소드 호출하는 법
  • 세벌식 . . . . 2 matches
          * [임인택]의 경우 어떤 치과에서 키보드 키캡에 붙이는 스티커를 나눠주는 페이지를 보면서 처음 세벌식을 접하게 되었다. 그때가 2005 년 2월경이었는데 처음에는 무척 힘들었지만 6개월정도 지나니 익숙해졌다. 세벌로 전환하기 이전인지 이후인지 기억은 잘 나지 않는데, 스펀지라는 프로그램에서 공병우 박사님을 추모하면서 세벌식과 관련된 지식을 알아본 적이 있었다. 카이스트인지 포항공대인지에 다니는 한 학생이 실험을 했는데, 두벌, 세벌 모두 엄청난 속도로 타이핑하는 장면을 봤다. 충격이었다. 어떻게 각각을 저렇게 빨리 칠 수 있는지. 나도 예전에 타이핑이라면 한가닥 했었는데 10년이상 쓰던 두벌을 버리고 세벌로 전환한 이후 두벌속도가 급격하게 줄었다. 처음 세벌로 바꿨을때 세벌보다 두벌을 약 20배 정도 빨리 칠수 있었는데, 지금은 오히려 두벌이 더 느리다. 이걸 가지고 생각해 볼 수 있는 문제는 사고의 전환이다. 스펀지에 나왔던 학생은 두벌로 타자할때 두벌식으로 사고하고, 세벌로 타자할때 세벌식으로 사고했을 것이다. 조금 생각해보면 이는 우리가 공부하는데 빗대어 설명할 수 있을 것이다. 가령 함수형 언어를 쓸때는 함수형 언어의 패러다임으로만 생각하고, 객체지향 언어를 쓸때는 객체지향 패러다임만을 생각한다던지 하는 것이다. 지금 생각하건데, 그 학생은 두벌/세벌 타자에 있어서 구루인것 같다. 나도 두벌/세벌을 모두 쓰지만 두벌식을 쓸때 세벌식으로 생각하고 키를 누른다던지, 세벌식을 쓸때 두벌식으로 생각하고 키를 누르는 경우가 많다. 프로그래밍을 할때도 마찬지. 내가 배제하려고 하는것을 완전히 배제하지 못한다.
  • 수학의정석 . . . . 2 matches
         (프로그램수행) // 함수들을 수행
         제가 알기론 clock() 함수가 리턴하는 값은 프로그램이 시작된 이후로 경과한 CPU 클럭 수 이기 때문에 시스템마다 다르다고 알고 있습니다. 그래서 CLK_TCK로 나누어 초 단위로 바꾸어 비교를 하는것으로 알고있는데... 어떻게 생각하시는지...? --[상규]
  • 숫자야구/조재화 . . . . 2 matches
         랜덤함수 설명은 더욱 공부하면 더 좋을꺼 같네요.
         #include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
  • 쓰레드에관한잡담 . . . . 2 matches
         Linux에서 멀티 프로세스 개념인 fork()는 내부적으로 do_fork()란 Kernel 함수를 호출하며, do_fork()는 내부적으로 user thread인 POSIX기반의 Mutex를 사용한다.
         함수가 실행되고 context switch가 일어나고 arg가 제대로 안바뀌는 것 같다.
  • 열정적인리더패턴 . . . . 2 matches
         '''열정을 갖고 솔선수범해서 스터디 그룹을 이끌어라. 사람들이 원하는 곳으로 만들고, 더 큰 커뮤니티에 참석하도록 초대하라. 자극이 되는 이벤트, 가상 공간 상에서의 대화로 멤버들에게 힘을 주고, 멤버들의 아이디어를 가까이서 수렴함으로써 지속적으로 그룹을 발전시킬 방법을 모색하라.'''
  • 유정석 . . . . 2 matches
         (배열과 포인터의 기초)-> 6월 10일(수) 수업시간 전까지 읽고 물어볼거 생각해오기
         (동적 할당에 대해서) -> 포인터를 공부한 후에 공부해야 한다.
  • 이승한/.vimrc . . . . 2 matches
         "화면 하단에 함수 protoType을 보여줌
         "전역변수/구조체/정의상수/함수정의를 추적해줍니다.
  • 이승한/java . . . . 2 matches
         클래스 관련 키워드 ; class, abstract, interface, extends, implements
          사용 JOptionPane.함수
  • 이영호/기술문서 . . . . 2 matches
         [http://bbs.kldp.org/viewtopic.php?t=24407] - Reference 에 의한 호출과 Pointer에 의한 호출 (결론: Reference는 포인터에 의해 구현되며 표현만 CallByValue 다.)
         [http://bbs.kldp.org/viewtopic.php?t=48059] - struct POS의 memcmp와 if 의 성능비교 (결과 : 다루는 배열이나 구조체가 커질수록 memory계 함수가 빠르다.)
  • 이영호/끄적끄적 . . . . 2 matches
         // File에서 array로 바뀐 것을 읽어와 함수를 수행 하는 것을 count-1번 반복한다.
         // 달라진곳은 save 포인터에 주소를 저장하고 다시 체크를 시작해 달라진곳이 나오면 자리를 교체한다.
  • 이영호/문자열검색 . . . . 2 matches
         출제자의 뜻이 strstr함수를 이용하는 것이 아니라
         strstr, strcase, strspn등과 비슷한 함수를 제작하는 것이었다면 이 답은 틀렸다.
  • 이영호/숫자를한글로바꾸기 . . . . 2 matches
         (수정) 일의 자리의 "일"을 제외한 함수 (주석문 추가)
         C언어의 장점인 효율적 함수 구성까지 떨어짐.
  • 이영호/시스템프로그래밍과어셈블리어 . . . . 2 matches
         몇몇 게임(카트라이더, 워록, 대항해시대 등등)의 프로그래머들이 Application 층만을 다룰줄 아는 무식한 프로그래머라는 것을 알았다. (특히, 워록의 프로그래머는 프로그래머라기 보다 코더에 가깝고 배운 것만 쓸 줄 아는 무식한 바보이다. 그 프로그래머는 개발자로서의 수명이 매우 짧을 것이다. 3년도 못가 짤리거나 혹은 워록이라는 게임이 사라질걸?) - (이 게임들은 코드를 숨기지 못하게 하는 방법도 모르는 모양이다. 이런식으로 게임들을 건들여 패치를 만들 수 있다. KartRider는 요즘에와서 debug를 불가능하게 해두고 실행 파일을 packing 한 모양이다. 뭐 그래도 많은 코드들을 따라가지 않고 ntdll.ZwTerminateProcess에 BreakPoint를 걸어 앞 함수를 건들이면 그만이지만.)
         프로그래머라면 Code의 본질을 알아야한다. 그것을 이루는 것이 Assembly이다. 이것을 수행하지 않은 프로그래머는 프로그래머가 아니라 Coder이다. Assembly로 특정 함수를 따라다니며 실제로 익히는 방법은 MSDN에서 나와있는 것을 그대로 베끼는 것보다 현명할지 모른다. 프로그래밍은 배우는것이 아니라 직접 Code를 짜보는 것이다. MSDN을 보는 것과 debug로 따라 가보는 것은 그 차이가 크다.
  • 이영호/한게임 테트리스 . . . . 2 matches
         간략하게 하나의 함수를 말해보면.
         447234 <- 다음 블럭 설정 함수 argument 3개를 받아들임.
  • 인수/Smalltalk . . . . 2 matches
          * 짜놓고 생각 : 이건 스몰토크프로그래밍이 아니다. C++/Java의 냄새가 너무 많이 나는것 같다. 부분부분을 좀더 간단하게 할 수 있을것 같기도 하다. 책을 더 봐야 할듯 싶다. 인스턴스 생성할때도 인자를 넘겨 받을 수 있을 텐데 잘 안된다.(지금 보니까 그렇게 하지 말라 한다. 대충 찾아보니 팩토리 메소드를 많이 쓰는것 같다. 또 클래스 메소드 만드는법 알아낼라고 줄기차게 삽질을 했다.--;) do라는 좋은게 있었군.
          * 2차원 배열 클래스가 있었다. 레퍼런스를 잘 찾아보고 하자. 이제 조금 볼만하구나.
  • 임시페이지 . . . . 2 matches
         클래스 시퀀스 : 레밍 앞으로 움직이기
         클래스 다이어그램 다듬기
  • 정모/2011.5.2 . . . . 2 matches
          * 지난 시간에는 2장의 중간부분 까지 읽고 이야기를 나누었다. 구체 클래스의 externs가 좋지 않다는 이야기뿐이어서 답답했다. 저자의 예시인 Java의 swing도 직접 써본적이 없어 와닿지 않았다. 어려운 주제였던 것 같다.
          * 정모에 뒤늦게 가서 OMS나 앞부분 정모는 대부분 참여를 못했지만 IBM공모전이나 삼성소프트웨어 멤버쉽같은 여러 활동을 항상 동아리때문에 바쁘다, 능력이 안된다는 핑계로 다른세계 이야기로만 생각해왔었는데 능력을 키우건 어쩌건 되는게 중요한게 아니라 도전을 해볼 필요도 있겠구나 싶었습니다. 하지만 이런 생각을 항상 하면서도 다음날 자고일어나면 금방 잊게되는게 문제네요.. 저도 이제 학교수업만 듣고 학점을 위한 공부가 아닌 진짜 나중을 위해 필요한 공부를 해야겠다고 느껴지지만 이것도 역시 쉽게 불타오르고 실천하지 않는 제 모습이 뻔히 보이네요.. 그러지 말아야할텐데 - [경세준]
  • 정모/2011.9.5 . . . . 2 matches
         == 멤버 소개 ==
         돌아온 멤버와 처음온 사람을 위한 나이순 자기소개
  • 제로페이지의문제점 . . . . 2 matches
         99학번들의 경우 1학년때 여름방학때는 C++ & API 스터디를(15명이 넘었던걸로 얼핏 기억), 그 이후에 좀 한풀 꺾이다가 이전 스터디 멤버중 5-6명이 MFC 스터디를 진행하였다. 이 또한 시험기간때 이후 잠정적으로 중지되었지만, 스터디 한 만큼만은 멤버들에게 지식으로 남았다. 그리고 그중 3명은 매일 금요일마다 밤새는 날을 만들기도 하였으며, 혹자는 이상엽씨 배개책을 버스에서 완독하였다고 전해진다.
  • 조영준/파스칼삼각형/이전버전 . . . . 2 matches
          * PTriangle 클래스를 갈아 엎었습니다.
          * PTriangle 클래스만 똑 떼서 파스칼 삼각형을 필요로 하는 다른 프로그램에서 쓸 수 있게 손을 봤습니다.
  • 조현태/놀이/미스틱아츠 . . . . 2 matches
          || 2005.05.31 || 리펙토링, 함수를 세분화 하고 중복을 조금 줄였다. || [조현태] ||
          || 2005.06.17 || 화면 출력 알고리즘 변화, 포인터로 간단한 레이어 효과 가능 || [조현태] ||
  • 중위수구하기/허아영 . . . . 2 matches
         그리고 int search_middleNum(int *a, int *b, int *c) 이함수는 구지 포인터로 값을 넘겨받을 필요는 없지 않나..
  • 진법바꾸기/허아영 . . . . 2 matches
          그런데 말야.. 저기 두 번째 함수의 i 과 turn 은 정말로 전혀 다른게 없다고. 이름을 여러개로 해주고 싶었다면 포인터를 사용하거나 전처리문을 사용하는게 나을텐데.. 같은연산이 중복되서 일어나니까 오히려 햇갈린다고..ㅎㅎㅎ
  • 책거꾸로읽기 . . . . 2 matches
         방갈로르는 시 전역이 거대한 IT파크같다. 인터내셔널 테크놀로지 파크(ITP)에는 100여개가 넘는 첨단기업들이 둥지를 틀고 있다. 이곳에서 일하는 인원만도 1만2천여명에 이르고, 아메리카온라인멤버스, 제너럴모터스, IBM글로벌서비스등등 입주한 회사의 면면이 만만치 않다.
         인도의 7학년(한국의 중학교 1학년) 수학교과서는 영국의 10학년 수준과 비슷하다. 12학년(한국의 고 3) 수학교과서를 서울시 교육청에 분석 의뢰하였더니 '''지금 한국의 보통 대학에서 가르치는 미분방정식이 나온다. 경제학 등에서 쓰이는 함수도 있다. 실용적인 내용이 많으면서 수준이 높다'''라는 평가가 나왔다. 십구단을 외우게 한다고 인도의 수학이 암기 위주인 것은 결코 아니다. 수를 셈하는 기초적인 계산능력을 암기를 통해 어렸을 때부터 키워놓고, 그걸 토대로 더 수준 높은 수학을 체득할 수 있게 하는 것이다.
  • 최대공약수/남도연 . . . . 2 matches
          저거~ 클래스가 화면에 출력해서 입력받고, 결과를 출력하는데..
          화면 입출력은 메인에서 하고 클래스는 변수로 값을 넘겨받고 변수로 값을 넘겨주는게 좋지 않을까?
  • 최대공약수/조현태 . . . . 2 matches
         첫번째 소스의 변수명을 이쁘게 해주려다가 포인터가 들어가고 더 길어져 버렸다.
          사용하려다 왠지 함수를 잘못 나눈듯한 느낌에 뒤늦게 수정..;;
  • 최소정수의합/송지훈 . . . . 2 matches
         -> 파싱 에러, 즉 구문 에러가 나는 코드입니다. (<=) 함수가 어떤 전달인자를 받는지 알아보세요.
         -> 그러고 보니 while 함수를 만들어서 써도 되겠다는 생각이..
  • 코바용어정리 . . . . 2 matches
         구현 객체가 ORB에 의해 제공되는 서비스를 이용하는 주된 방법은 객체 어댑터를 통하는 것이다. 객체 어댑터는 CORBA 라이브러리인데 ORB 코어 통신 서비스의 맨 위쪽에 위치하고 있으며 서버 객체를 대신하여 리퀘스트를 받아들인다. 객체 어댑터는 서버 객체를 인스턴스화하기 위한 실행 환경을 제공한다. 즉, 서버 객체에 리퀘스트를 전달하며 객체 ID를 부여하는 등의 작업을 하게 된다는 것이다. 또한, 객체 어댑터는 구현 저장소에 어댑터가 지원하는 클래스와 런타임 인스턴스를 등록한다. CORBA에서는 각 ORB가 기본 객체 어댑터(BOA)라 불리는 표준 어댑터를 지원하도록 규정한다. 하나의 서버가 여러 개의 객체 어댑터를 지원할 수 있다.
         ORB 인터페이스는 애플리케이션에 중요한 지역 서비스에 대한 API들로 구성되어 있지 않다. 이것은 곧바로 ORB로 가는 인터페이스이고 모든 ORB들에 대해 동일하다.ORB 인터페이스는 객체 어댑터 또는 객체 인터페이스에 의존하지 않는다. 대부분의 ORB의 기능이 객체 어댑터, 스텁, 스켈레톤 또는 동적 호출 등을 통해서 제공되므로 몇몇 오퍼레이션만이 모든 객체들에 대해 공통이다. 공통 오퍼레이션에는 get_interface와 get_implementation 같은 함수가 포함되어 있는데, 이것들은 임의의 객체 레퍼런스에 작용하며 각각 인터페이스 저장소 객체와 구현 저장소 객체를 얻는 데 사용된다.
  • 큰수찾아저장하기/허아영 . . . . 2 matches
         추가: 시간이 많이 걸린 이유 - 역시나 배열을 함수화 하는 것에서, 새로운 방법이 없을까 궁리하다가,
         각 기능별로 함수로 나누는건 좋은 생각인데 말야..^^ 그게 오히려 문제가 된것 같은 느낌이..ㅎㅎ
  • 타도코코아CppStudy/0728 . . . . 2 matches
          * 폴리모피즘, 가상함수, 템플릿 발표
         == 가상함수와 다형성 예제 ==
  • 토이/메일주소셀렉터/김정현 . . . . 2 matches
         //메인클래스
         // 파일처리 클래스
  • 토이/숫자뒤집기/김정현 . . . . 2 matches
         4.제일 뻘짓;; Arrays의 소트 함수를 이용. 배보다 배꼽이..
         9. Collections 클래스를 이용
  • 튜터링/2011/어셈블리언어 . . . . 2 matches
          * 지난주에는 루프와 레지스터를 이용한 재귀함수까지 해 보았다.
          * 이번에는 전역변수와 스택을 이용한 재귀함수를 구현해 본다.
  • 튜터링/2013/Assembly . . . . 2 matches
          * 재귀함수에 관해 써보고, n!을 재귀함수로 작성할 때 무엇을 고민해야하는지 써보자.
  • 파스칼삼각형/강희경 . . . . 2 matches
         void printArray(int *arr, int n); //각 행을 출력하는 함수
         void copyArray(int *fArr, int *arr); //이전의 행을 임시저장하는 함수
  • 파스칼삼각형/김홍기 . . . . 2 matches
          * 그리고나서 좌표구하는건 팩토리얼이라는걸 떠올려서 재귀함수로 도전
          * 그런데 재귀함수쓰니 뭔가 이상한 문제가 나와서 그냥 포문활용
  • 프로그래밍십계명 . . . . 2 matches
         6. 함수 안에서 매개 변수값은 결코 믿지 말지어다.
          *컴파일러의 경고는 모두 켜 두어라. 경고는 곧 오류이니라. 오류를 알리는 함수의 결과를 확인하지 않는 우를 범하지 말지어다. 모든 파일 입출력과 모든 메모리 할당은 조만간 실패할 것이라.
  • 프로그래밍잔치/ErrorMessage . . . . 2 matches
          * 같은 시간, 창섭이와 상욱이는 "Hello World" 삑사리 내고 있었다. 컴파일 하면 클래스가 없댄다. 이래저래 암울한 우리 조의 분위기를 느낄 수 있었다.
          * 끝나갈 무렵, 합칠떄가 왔다. 창섭군과 은지 누나가 한걸 가져와서 씌울라고 보니..(처음에는 쉬울줄 알았따. 내 메인 프레임에서 버튼을 누르면 창섭군과 은지 누나가 만든 전화번호부 프레임을 띄울 예정이었다.) 문제가 생겼다. 내껀 스윙이고, 창섭이네꺼는 AWT다.--; 스윙과 AWT 같이 쓰지 말라고 하는 말을 너무 많이 봐서.. 스윙으로 고치기 시작했다. ... shit. 함수가 다르자나.--; 이러면서 어떻게 어떻게 고치고 보니--; 메뉴가 가운데 달렸다. 석천이형의 도움을 받아서, 메뉴를 제 위치에 나오게 했다.
  • 프로그래밍잔치/첫째날 . . . . 2 matches
          * Java 은 메소드(함수, 프로시저)의 길이가 7줄을 넘으면 안된다. ; 기준
          * Python 은 메소드(함수, 프로시저)의 길이가 7줄을 넘으면 안된다. line 기준
  • 프로그래밍파티 . . . . 2 matches
          * 클래스 다이어그램(UML, CRC 카드, 혹은 어떤 종류의 일관된 다이어그램이면 가능) ''--> 이걸 그릴 수 있는 매직펜과 전지가 필요하겠네요''
          * #class, #method : 클래스와 메쏘드 숫자에 반비례 (전체 점수에서 비율은 가장 낮음)
  • 하노이탑/한유선김민경 . . . . 2 matches
         //함수시작
         //함수종료
  • 호너의법칙/박영창 . . . . 2 matches
         horner_func 호너의 법칙을 재귀함수로 구현한다.
         @return 호너함수의 재귀호출 값 + 호출 차수의 계수값
  • 후기 . . . . 2 matches
         함수형 언어 Haskell을 배우는 시간을 많이 가졌는데 참 재미있었다. 더욱 재미있는 것은 함수형 언어의 좋은 점이 다른 언어에도 녹아들 수 있다는 것이다. 수학에서 출발하는 개념이 실제로 쓰이도록 중간에서 다리 역할을 하고 있다. 수학이 프로그램 언어에 미치는 영향력을 볼 때 학부 때 컴퓨터 공학 대신에 수학을 전공해도 좋을 것 같다. 그게 안 된다면 대안언어축제라도 참가하면서 [성장]할 수 있어야 한다.
  • 02_C++세미나/0523 . . . . 1 match
          * 포인터와 동적할당을 이용한 Linked List
  • 05학번만의C++Study/숙제제출1/조현태 . . . . 1 match
          책은 아직 안샀고, 답은 함수를 추가했음 - [조현태]
  • 05학번만의C++Study/숙제제출1/최경현 . . . . 1 match
         convert 함수라고 되있는거 long으로 하지말고 float이나 double같은 소수점 나타낼 수 있는걸로 해봐. 그리고 왜 대입을 두번이나? - [재혁]
  • 10학번 c++ 프로젝트/소스 . . . . 1 match
          int* a; //설정 시간 위치 포인터
  • 1thPCinCAUCSE/ExtremePair전략 . . . . 1 match
          * 저희 {{{~cpp Extreme Pair}}} 팀은 어떤 문제든 우선 소스를 기본적으로 밑에 형태로 시작했습니다. 그래서 입력과 출력이나 진행에는 전혀 신경 쓰지 않고 문제를 푸는 알고리즘(process() 함수 부분)에만 집중할 수 있었습니다.
  • 2005/2학기프로젝트 . . . . 1 match
         || 프로젝트 || 멤버 ||
  • 2010JavaScript/강소현/연습 . . . . 1 match
         width="300" height="300" usemap="#planet" onmouseout="alert('마우스 아웃');" alt="마우스 포인터 감지">
  • 2010JavaScript/역전재판 . . . . 1 match
          function changetext(){ // 글자가 나오는 text부분에 내용을 바꾸는 함수.
  • 2학기자바스터디 . . . . 1 match
          오히려 우리들이 더 게으르게 했죠 ㅡ.ㅡ;;; 많이 나가진 못했지만 그래도 개념적인 면(객체지향이나 클래스..)에서 자세히 설명해 주셨는데... 앞으로 도움이 많이 될것 같아요... 계속 공부하는 후배들이 남았다는것만 해도 큰 성과지요 ^^ -세환
  • 2학기파이선스터디 . . . . 1 match
          [2학기파이선스터디/함수]
  • 2학기파이선스터디/문자열 . . . . 1 match
          5. 멤버십 데스트(Membership Test) = in
  • 3DAlca . . . . 1 match
         || 7.28 || 판이 움직일때 공이 맞으면 그 방향으로 속도 증가, 종단 속도 개념 추가, 벽돌을 쉽게 추가 하는 함수 생성, 벽돌과 공의 충돌 처리(60%정도, 약간의 버그가 있음) ||
  • 3DGraphicsFoundation . . . . 1 match
          * 수학함수 모듈 인터페이스 예제 - C style : ["3DGraphicsFoundation/MathLibraryTemplateExample"]
  • 3DStudy_2002 . . . . 1 match
         * ["3DStudy_2002/hs_lecture1"] : 가속기 함수만 가지구 뭔가 해보기
  • 3D프로그래밍시작하기 . . . . 1 match
         수학관련 라이브러리가 어느정도 모습을 갖추었으면, 이제 최초로 뭔가 돌아가는 것을 만들어 볼때입니다.. 일단은 최소한의 초기화와 실행 절차를 갖춘 프로그램을 만들어 놓도록 합니다. 화면에 무언가를 그리는 함수 같은 것은 쉽게 바꿔치기 할 수 있도록 해 놓는 것이 좋을 것입니다. 이런 뼈대 라이브러리의 형태에 대해 참조하실려면 OpenGL 관련 라이브러리중 하나인 glut 를 참조하심이 좋을 듯..
  • 3N+1Problem/Leonardong . . . . 1 match
         절대 쉽지 않은 문제였다. 아직 수행시간이 턱없이 길다. 사전형 멤버를 이용해 계산했던 부분은 저장해두어 다시 쓰도록 하였다. 답답하다. PsyCo라는 모듈을 새롭게 알알게되었다. --[Leonardong]
  • 3N+1Problem/구자겸 . . . . 1 match
         int cycle_length(int n); // cycle_length를 구하는 함수
  • 3N+1Problem/김회영 . . . . 1 match
         int check(int n)//사이클의 길이를 리턴하는 함수
  • 3rdPCinCAUCSE/J-sow전략 . . . . 1 match
          * 아무리 급해도 필요한 기능은 함수로 묶어내야 한다고 느꼈습니다.
  • 5인용C++스터디/다이얼로그박스 . . . . 1 match
         대화상자(DialogBox)는 최상위 윈도우(top-level window)의 자식 윈도우로서 일반적으로 사용자로부터 정보를 얻기 위해 사용된다. Dialog는 사용자들이 파일을 선택하여 열기 등의 작업을 쉽게 하도록 합니다. 파일 작업을 쉽게하기 위해 제공하는 컴포넌트가 FileDialog클래스이다. Dialog는 Frame윈도우와 비슷한데 그 차이점을 살펴보면, 대화상자는 윈도우에 종속적이기 때문에 그 윈도우가 닫히면 대화상자도 따라서 같이 닫히게 된다는 것이다. 또한 윈도우를 최소화시켜도 대화상자는 사라지게 된다.
  • 5인용C++스터디/비트맵 . . . . 1 match
         "메모리 디바이스 콘텍스트"를 만들어서 BitBlt()나 StretchBlt()함수를 이용해서 메모리 디바이스에 있는 내용을 실제 디바이스 컨텍스트에 출력하는 방식을
  • 5인용C++스터디/스택 . . . . 1 match
         클래스를 이용하여 스택 구현하기.
  • AM/알카노이드 . . . . 1 match
         주석을 안 달아서 뭐가 뭔지 했갈릴까봐 간략히 설명합니다. 옛날 알카노이드 겜을 모델로 해서 거의 비슷해요. 일단 CVaus 클래스는 플레이어(움직이는 막대), CBrick은 벽돌, CPill은 알약, CBall은 공입니다. 아직 총알 나가는건 안되구요, 맵도 하나밖에 없어요. 다 깨도 그냥 똑같은 맵이 나와요. (참고로 알약중에 보라색이 다음판 넘기는거구, 빨간색은 총알쏠수 있는 상태임). 메뉴 기능되는것도 없고, 게임오버되면 다시 실행 해야되요 -세환
  • APlusProject/PMPL . . . . 1 match
         기본 설계서 순서를 바꿔야 할 듯. 보통 유즈 케이스 -> 시퀀스 -> 클래스 식으로 발전. --재동
  • AcceleratedC++ . . . . 1 match
         흠 처음 생각했던 것 보다 뒷 장의 내용이 좀 신선한 부분이 많다. 특히 14장에 Ptr 클래스는 정말로 신선하다. =.= C++로 프로그램을 짜면 이렇게 짤 수도 있구나 그런생각이;; - [eternalbleu]
  • AcceleratedC++/Chapter6/Code . . . . 1 match
          * 먼저 과제라고 나온 optimistic_median_analysis 함수 만들기
  • AdvancedJS . . . . 1 match
          * 개인적으로 자바스크립트에 관심도 있고 해서 세미나를 들으러 왔다. 근데 가끔 웹페이지에서 자바스크립트 소스를 보면 C++이랑 비슷하게 쓰길래 그냥 비슷한 언어인가 싶었는데, 이번에 들어보면서 오히려 다른 점이 크게 부각된 느낌이다. C++이랑 비교해서 상속 방식도 다르고(프로토타입 상속) this의 개념도 좀 다르고 함수가 객체로 취급되고 등등. 물론 나중에 따로 책을 보면서 공부를 하긴 하겠지만 아마 이번에 배운 내용은 책에서 쉽게 찾아볼 수 없지 않을까 싶다. - [서민관]
  • BasicJAVA2005 . . . . 1 match
          - 그 파일에 public static void main(String[] args) 함수가 없어서 그런거 같은데... --선호
  • Basic알고리즘/63빌딩 . . . . 1 match
          코딩. 랜덤함수로 1 ~ 64 중의 수를 정한 다음, 자신의 방법을 통해서 찾아보자!
  • Boost . . . . 1 match
          * ["Boost/SmartPointer"] : Boost 에서 제공되는 스마트 포인터 사용 방법
  • BoostLibrary . . . . 1 match
          * [BoostLibrary/SmartPointer] : Boost 에서 제공되는 스마트 포인터 사용 방법
  • BuildingParserWithJava . . . . 1 match
         3학년 1학기 ProgrammingLanguageClass에서 숙제로 파서를 만들면서 한계를 많이 느꼈었다. 가장 큰 문제는 모든 흐름이 함수 호출을 따라 흘러간다다는 것이었다. 어느 곳이 잘못되었는지 알기가 어려웠기 때문에 찾는데 무척 애를 먹었다. 문법을 하나 추가하는 작업도 매번 오래 걸렸다. 그러다 보니 평가에 중요한 예외처리를 할 시간이 많지 않았다.
  • BusSimulation/상협 . . . . 1 match
          //이루어져야할 할일들을 처리하는 함수
  • BusSimulation/영창 . . . . 1 match
         구현특이사항 : vector, map, algorithm 등 stl 클래스 사용
  • BusSimulation/조현태 . . . . 1 match
          C++이라서 그런지.. 내가그런건지는 몰라도 이상하게 클래스로만 자면 C로 작성하는 것 보다 시간이 더 걸리는듯..
  • BusSimulation/태훈zyint . . . . 1 match
         STL을 이용하고 함수별로 나누는 리팩토링이 필요하다 -ㅅ-
  • C++3DGame . . . . 1 match
         함수를 불러 쓰듯이. 케케.. ㅡㅡ; 어려워.. 해성이형한테 물어봐야지.. --; [[BR]]
  • C/Assembly/연산 . . . . 1 match
         이렇게 구현했는데 GNU Compiler는 %eax에 포인터를 넘겨줘 그것을 가지고 계산을 한다.
  • CPPStudy_2005_1/STL성적처리_1_class . . . . 1 match
          * C++ 클래스를 너무 오래간만에 만들었더니 생성자에 리턴값이 없다는것 조차 까먹었다. 황당 -_-;
  • CSS . . . . 1 match
         잘 구조화된 클래스와 CSS를 잘 이용하면 충분히 깔끔한 소스를 얻을 수 있다.
  • CeeThreadProgramming . . . . 1 match
         VS.NET에서도 함수이름을 인식하지 못하는 경우 프로젝트 세팅에서 MFC라이브러리를 사용하도록 해보세요.
  • Class로 계산기 짜기 . . . . 1 match
         상욱형이 짜주신 계산기 메인은 짧은데 클래스 길이가;;;
  • ComposedMethod . . . . 1 match
         메세지를 보내는 데에는 시간이 걸린다. 즉 함수 호출에는 오버헤드가 뒤따른다. 그러므로 최고의 속도를 내려면 하나의 메소드에 모든걸 때려넣을 수도 있다. 하지만? 댓가는 클것이다.(인력낭비, 비구조적 프로그램 양산)
  • ComputerGraphicsClass/Exam2004_2 . . . . 1 match
         스플라인 함수의 특징을 결정하는 세 가지 knot vector에 대해서 설명하시오
  • ConnectingTheDots . . . . 1 match
         소스코드를 보면 다음의 클래스들 관계가 MVP 이다.
  • ContestScoreBoard . . . . 1 match
         ACM ICPC에 출전하고 싶다면 점수 계산법을 알아야 한다. 경시 대회에 참가한 팀의 순위는 우선 푼 문제의 개수가 많은 순으로, 그 다음으로는 시간 벌점(penalty time)이 적은 순으로 매겨진다. 이 둘을 모두 고려했는 데도 동점 팀이 둘 이상이면 팀 멤버 수가 적은 쪽이 더 높은 순위를 차지할 수 있다.
  • ConverterMethod . . . . 1 match
         스몰토크의 String 클래스에 보면 asDate라는 메세지가 있다. 켄트벡이 경험한 정말 극단적인 경우에 하나의 객체마다 다른 형태로 변환시켜주는 Converter Method가 30개씩 있었다고 한다. 새로운 객체가 추가될때마다 저 30개의 메소드를 모두 추가해줘야만 했던 것이다.
  • CppStudy_2002_1/과제1 . . . . 1 match
          * 문제1번 : 여기서도 전역 변수를 많이 사용한거 같다. 이것은 피하는게 좋다. 여기서 함수가 호출한 갯수를 알아야 하는데 이때는 static 이라는 키워드를 사용하면 된다.
  • CppStudy_2002_2/STL과제 . . . . 1 match
          * 이름은 string 클래스로 처리한다.
  • CppStudy_2002_2/슈퍼마켓 . . . . 1 match
         1. 클래스를 이용 (좀 더 체계적으로)
  • CppStudy_2005_1/BasicBusSimulation . . . . 1 match
          * 클래스와 STL을 적절하게 써서 짜~ 봅시다.
  • CssMarket . . . . 1 match
         || /pub/upload/narsil.css || Upload:narsil.css || 마우스 포인터가 핵심(?) ||
  • C언어정복/3월30일 . . . . 1 match
         11. printf()와 scanf() 함수 이용 시연
  • C언어정복/3월30일-숙제 . . . . 1 match
         2. printf() 함수를 한 번만 사용하여 다음과 같이 4줄에 걸쳐서 표현되는 문자열을 출력하라.
  • DataStructure/Tree . . . . 1 match
         // 트리에 관한 함수
  • Delegation . . . . 1 match
         스몰토크는 다중상속을 지원하지 않는다. A와 B의 속성을 모두 가지고 있는 객체를 표현하려면 어떻해야할까? 상속은 잠재적으로 오버헤드가 있다. 또한 복잡한 상속관계에서는 서브클래스의 단 하나의 메소드를 공부함에도 위에서 알아야 할게 너무 많다. 답은 '위임'이다. 일의 일부를 다른 객체에게로 위임하자.
  • DesignPatternsAsAPathToConceptualIntegrity . . . . 1 match
          오브젝트/클래스 디자인 위에 아키텍쳐의 존재
  • DevPartner . . . . 1 match
         d) 프로그램을 종료합니다. -> 세션 윈도우가 뜨면서 함수 호출 상황을 보고서로 만들어 줍니다.
  • Direct3D . . . . 1 match
         기본적인 클래스인 CD3DApplication 이 있고, 이것을 상속받은 CMyD3DApplication을 사용하여 하고싶은 일을 할 수 있다.
  • Eclipse . . . . 1 match
         ||Ctrl+1||Quick Fix, 잘못 된 부분에 대하여 권장하는 수정 방법을 보여준다. 사고를 둔화 시킨다. --;; 예를들어 import가 안되었다 싶으면 시키라고 하고, 선언된 클래스가 없으면 만드는 것까지 나온다. 빨간줄 나오면 눌러보라. 가장 경악할 기능.||
  • EcologicalBinPacking/강희경 . . . . 1 match
         output() 함수도 이런식으로 리펙토링할 수 있다. --재동
  • EcologicalBinPacking/김회영 . . . . 1 match
         //가장 큰 수인 조합을 찾아낸다. max()함수를 통해 리턴값을 얻는다.
  • EffectiveSTL/VectorAndString . . . . 1 match
          * reserve를 사용하면 재할당, 반복자, 포인터, 참조 등등의 갱신을 최소화 시킬수 있다.
  • EightQueenProblem/서상현 . . . . 1 match
         모든 해를 출력하려면 recur 함수를 이렇게 고친다.
  • EightQueenProblem/임인택 . . . . 1 match
          처음에 시작 call 을 좀 이상하게 한다. loop 을 돌면서 첫번째 라인의 원소에 대한 get_Queen()함수를 호출한다. 생각에는 get_Queen(0,0); 처럼 호출하는게 가장 이상적이라고 생각하는데..--;
  • EightQueenProblemDiscussion . . . . 1 match
         직접 다시 새로 시작하는 것에 대해서는 비교계산을 내리기 힘들것 같네요. (더 좋은 디자인을 얻어내는 것과 훈련라는 점에서는 물론 저도 추천) 제가 잘못했다고 생각되는 부분은, 퀸을 배열하는 방법 알고리즘 부분에 대해 TestDrivenDevelopment 를 지키지 못했다는 점이죠. (머릿속에 먼저 재귀함수 호출 등의 특정 알고리즘들이 먼저 떠오른지라. )
  • ErdosNumbers/황재선 . . . . 1 match
          * 자바 1.5의 새로운 기능을 조금 사용해보았다. 클래스 Scanner는 이전 방식으로 하는 것보다 훨씬 편한 기능을 제공해 주었다. for loop에서 신기하게 배열을 참조하는 방식이 Eclipse에서 에러로 인식된다.
  • Erlang . . . . 1 match
          * 함수형 언어를 체험해 볼 수 있다
  • ExtremeProgramming . . . . 1 match
          * UnitTest: 모든 클래스들에 대한 자동화된 테스트 코드들.
  • FactorialFactors . . . . 1 match
         팩토리얼 함수는 많은 특성을 갖는다. 이 문제에서 주어진 정수 n을 다음과 같은 팩토리얼 식 n!로 표현했을때 인수항의 최대수를 구하고자 한다. 단 1은 제외한다. 예를 들어 보자.
  • FifteenSecondsRule . . . . 1 match
         어떤 시스템/프로그램이 있을 때, 모든 개념적 단위(예컨대 패키지, 모듈, 클래스, 메쏘드 등)를 개발자 자신이 15초 이내에 설명할 수 있어야 한다는 "15초 룰"의 확장판이 꽤 유용할 때가 많습니다. 이런 식으로 설명을 모두 마쳤을 때는 소스 코드 전부를 설명한 셈이어야 합니다.
  • FreeMind . . . . 1 match
         문장으로 부터 클래스를 추출해 낼 때 유용하게 사용 할 수 있을듯 하다.
  • FreechalAlbumSpider . . . . 1 match
         또하나 문제로는 이상하게 MySQLdb 모듈이 문제를 일으켰는데, update query 를 날릴때 에러발생을 하는 것이였다. 똑같은 쿼리문을 쉘에서 실행했을때는 잘 되었는데, MySQLdb 의 cursor 클래스를 이용, 쿼리를 날리면 실행이 안되는 것이였다. (DB 에 적용은 되는데, 에러가 발생한다.) 이 부분에 대해서는 일단 try-except 로 땜질처리를 했지만, 그리 기분좋진 않다. 수정이 필요하다.
  • GDBUsage . . . . 1 match
         해당 인자값을 구조 프로그램이 실행된다. 브레이크 포인터 설정을 통해서 진행을 중지하는 것이 가능하다.
  • HelpOnConfiguration . . . . 1 match
         /!\ wiki.php에 정의되어 있는 WikiDB 클래스를 보면, 우선 하드코딩된 기본 설정이 있고, config.php에서 읽은 설정 사항을 그 위에 덧씌우는 방식이다.
  • HowToCodingWell . . . . 1 match
          * 흠.. 일단 일련의 동작들을 개별적으로 나누고 (주석을 달아놉니다!!ㅎ__ㅎ) 하나하나 함수를 만들어 가면 눈에 잘 들어오지 않을까요?? -[김상호]
  • InWonderland . . . . 1 match
         철민아 작업은 {{{~cpp EC_AliceCardHome001.zip}}} 이걸로 하고 월요일 저녁 5시까지 해줘. 난 함수 내부 채우고 프리젠테이션 만들고 있으마. --재동
  • InformationStandardizationClass/Exam2006_1 . . . . 1 match
         2. ISO, JTC1, ITU 의 각 멤버 구성을 쓰고 차이를 쓰시오
  • IntelliJUIDesigner . . . . 1 match
         === binding 할 클래스 설정 ===
  • IntentionRevealingMessage . . . . 1 match
         ParagraphEditor라는 클래스에서 highlight라는 메세지를 봤다. 당신은 '오, 재미있겠는걸.' 하고 본다. 코드는 다음과 같다.
  • JAVAStudy_2002 . . . . 1 match
         c같이 하믄 쉬울 텐데.. 무신 클래스들이 이렇게 많은지.. --;;[[BR]]
  • JAVAStudy_2002/진행상황 . . . . 1 match
         c같이 하믄 쉬울 텐데.. 무신 클래스들이 이렇게 많은지.. --;;[[BR]]
  • Java Study2003/첫번째과제/방선희 . . . . 1 match
          * C 언어의 포인터처럼 메모리를 직접 access할 수 없다.
  • Java/ModeSelectionPerformanceTest . . . . 1 match
         이 방법은 Mode 추가시 그냥 Ex''ModeName'' 식으로 추가해주면 된다. 그러면서 Mode 조건 분기 부분이 변하지 않는다. Reflection으로 table lookup 채우는 부분이나 Mode 조건 분기 부분을 아에 상위 클래스로 추출할 수 있다. 퍼포먼스면에서는 의외로 앞에서 수동으로 map 을 채우는 방법과 같다. 유연성과 퍼포먼스 두가지가 적절히 어울어지는 방법이다.
  • Java/ReflectionForInnerClass . . . . 1 match
         innerclass 에서는 기본적으로 Inner Class 를 포함하고 있는 상위클래스의 레퍼런스가 생성자로 들어간다. 마치 C++ 에서 메소드들에 대해 this 가 기본 파라메터로 넘어가는 것과 같은 이치랄까.
  • Java/스레드재사용 . . . . 1 match
         만약 그러면.. 무한루프때메.. wait..어쩌구 함수에 도달 못해서.. '도달할수없는 문장' 이라는 에러가 나는것이 아닐까..??? (._.);
  • JavaScript/2011년스터디/윤종하 . . . . 1 match
         급한대로 파스칼의 삼각형 만들어서 if, for, 함수정의 공부한거 티내려고 했는데 안되네요 ㅠ
  • JavaStudy2002/영동-3주차 . . . . 1 match
         3번째의 코드는 comment solving을 보인거니 감안하십시오. 3번을 그대로 한다면, 입력 데이터와, Bug 사이의 인터페이스를 맞추는 함수가 필요할것입니다.
  • JavaStudy2002/입출력관련문제 . . . . 1 match
          * 여러분이 어려워하시는것 같아, 입력 부분을 만들었습니다. 해당 static method의 기능은 한줄을 읽고, 공백이나, 탭을 기준으로 배열을 반환합니다. 사용 방법은 해당 함수의 main 을 참고하시고, 다른 소스에서 import해서 그냥 사용하세요. --["neocoin"]
  • JavaStudy2003/두번째수업 . . . . 1 match
          * 클래스정의 및 인스턴스(객체) 생성
  • JavaStudy2003/세번째과제/곽세환 . . . . 1 match
         = 클래스정의 및 인스턴스(객체) 생성 (예제1 + 예제2) =
  • JavaStudy2003/세번째과제/노수민 . . . . 1 match
         == 클래스 정의 및 인스턴스(객체) 생성 ==
  • JavaStudy2004/이용재 . . . . 1 match
         함수명이나 변수명을 지을 때 mynameis같이 쓰면 나중에 보거나 딴 사람이 보았을 때 이해하기가 힘들 수 있으니 myNameIs나 my_name_is처럼 각 단어끼리 구분 짓는 습관을 갖는 것이 좋다고 생각합니다. --[강희경]
  • JavaStudy2004/조동영 . . . . 1 match
          자식 클래스의 생성자는 전달인자가 없는 기본 생성자 모양으로 해놓고( ex) zealot() )
  • JollyJumpers/김태진 . . . . 1 match
          //두개의 값사이의 차를 B함수에 넣음.
  • JollyJumpers/이승한 . . . . 1 match
         별생각없이 만들다가 필요 없이 함수를 쓴듯.
  • JosephYoder방한번개모임 . . . . 1 match
         리펙토링 기본 기법에 관해서는 기본적으로 Rename과 함수 분할 등을 Martin Fowler이 지은 Refactoring책을 통해 알수있다고 했다 이러한 리펙토링을 이용하여 청소할 수 있고 리펙토링은 중요하다고 했다. 이거 좋군. 딱 들은 생각. 우선 리펙토링할때는 이름이 최우선적으로 다루어져야한다고 했는데 가장 설명하기 좋고 듣기도 편했던 부분이다. 그 이유는 이름부터가 단축이면 못알아먹기 때문에~~~!! 이라고했다. 그래서 나는 앞으로 길더라도 의미가 되는 단어를 쓰기로 결심했다. 괜히 이름 단축시키지 말자고.
  • Jython . . . . 1 match
          * 아래와 같이 하면 한글을 제대로 받을 수 있다. 나는 파이썬에 있는 디코드, 인코드 함수를 사용하려고 했는데 잘 되지 않았고, 생각을 바꿔서 자바에 있는 인코드, 디코드 방법을 썼다.
  • LazyInitialization . . . . 1 match
         LazyInitialization의 하나의 변수당 두개의 메소드로 나눠서 초기화를 한다. 하나는 변수가 LazyInitialization되는 것을 감추어 주는 getter이고, 다른 하나는 변수에다 디폴트값으로 할당을 해줄 DefaultValueMethod이다. 이 방법은 유연성이 증대된다. 당신이 서브클래스를 만든다면, DefaultValueMethod를 오버라이딩함으로써, 기능을 바꿀 수 있다. 전장에서도 언급했듯이 성능도 증대시킬 수 있다.
  • LinkedList/숙제 . . . . 1 match
          free(pIns); // malloc함수로 만들어진 메모리중 쓸모 없는 메모리는 다시 반환되어야한다. (그렇지 않으면 메모리가 가득차서 컴퓨터가 멈춘다. ㅋㅋ)
  • Linux/디렉토리용도 . . . . 1 match
         리눅스의 디렉토리 구조를 이해하기 전에 마운트라는 개념을 이해해야할 필요가 있다. 리눅스는 모든 파티션을 /(이하 루트)에 포인터를 통해 연결한 마운트의 개념을 통해서 접근을 할 수 있다. 따라서 모든 디렉토리를 각기다른 장치 각기 다른 파티션에 나누어 넣어서 따로 보관할 수 있으며 데이터가 직접 보관되는 디스크를 따로 마운트해서 나중에 시스템을 다시 설치할때에 그 파티션만 지우지 않고 후에 마운팅하는 용도로 사용이 가능하다.
  • Linux/필수명령어/용법 . . . . 1 match
         일반적으로 echo 명령은 프롬프트 상에서 사용되는 일은 없다. 하지만 스크립트 작성시 번번히 사용된다. 셸 스크립트 상에서 echo 명령은 BASIC의 PRINT 명령이나 C 언어의 printf() 함수와 같이 메시지를 출력하는 데에 자주 사용된다. 또한 전혀 필요없을 것 같은 echo의 -n 옵션도 스크립트 상에서는 유용하게 사용될 수 있다.
  • Lotto/김태진 . . . . 1 match
          * 아, 그리고 오랜만에 포인터를 썼는데 예상대로 써져서 흡족했습니당.-
  • Lotto/송지원 . . . . 1 match
         int nc6( int n ) { // nC6 함수
  • MFC/HBitmapToBMP . . . . 1 match
         // Purpose: [주어진 HBITMAP에서 이미지 정보를 읽어 오는 함수]
  • MFC/RasterOperation . . . . 1 match
          {{{~cpp CDC::SetROP2()}}} 라는 함수로 제공하며 RasterOPerationTo의 약자이다.
  • MFCStudy_2002_1 . . . . 1 match
         그리고 중간 중간에..함수를 만들어서 사용하고 싶은데...전달인자로 뭘 받아야하는지도 잘모르겠고..^^a[[BR]]
  • MFC_ . . . . 1 match
         8. [양쪽의 클래스를 참조 필요시]
  • Mario . . . . 1 match
          * 선형탐색을 하는 문제입니다. 재귀함수나, DynamicProgramming을 연습하는데 좋습니다.
  • Metaphor . . . . 1 match
         시스템 메타포를 선정하면 같은 팀내에서 클래스와 메소드의 이름을 일관적으로 정할수 있어 공감대를 형성할 수 있다. (즉 하나의 메타포를 선정하여 공유하면 변수 이름같은 것을 지을때 같은 관점으로 짖게 된다는 의미). 어떤 객체에 대한 이름을 정하는 것은 시스템 전체를 이해하거나 코드를 재사용하는데 매우 중요하다. 만약 메타포를 올바르게 정한다면, 이름이 어떻게 정해지는가를 추측할 수 있게되고 실제로 개발 시간을 크게 절감시켜준다. 구축할 객체에 대한 이름을 위한 시스템(즉 메타포)를 결정할때는 모든 사람이 해당 시스템에 대하여 특별한 지식이 없이도 쉽게 연관되어 질수 있는 것으로 선택해야 한다. 예를 들어 크라이슬러의 지불시스템은 생산라인으로 구축되었다. 포드의 자동차 영업사원들은 BOM(부품표)으로 구조화 되었다. 구축하려고 하는 분야의 메타포를 사용할 수도 있다. 그러나 충분히 단순하지 않다면 영영에 해당하는 메타포를 사용하지는 말아라.
  • MobileJavaStudy/Tip . . . . 1 match
          * System.gc() 함수를 호출하며 가비지 콜렉터를 명시적으로 수행해 준다.
  • ModelViewPresenter . . . . 1 match
         MVP 는 실제로 3개의 클래스가 더 있다. 요약하면
  • ModelingSimulationClass_Exam2006_1 . . . . 1 match
         2) 부족한 시간, 랜덤함수를 사용할 수 없는 상황이라는 점을 말하고, TD 의 기대치를 구했다. 대충 구해보니 7.55 분가량이 소요된다는 사실을 알았다. (좌우 대칭형으로 가정했기 때문에... -_-) 따라서 한 패거리의 실기 시험합격자의 최대 인원은 40명 소요되는 시간은 총 5시간이지만 SQMS 모델이 큐잉에서 최대의 효율을 발휘 할 수 있으므로, 양쪽의 서버에 반씩을 나누어서 시험을 보면 2시간 반가량이 필요하다고 판단. 필기가 종료되는 시간은 10:00 + 2:30. 14:00 + 2:30 따라서 당일의 시험이 완전히 종료되는 17:00 분 안에 시험을 끝낼 수 있기 때문에 해당 모델은 안정하다고 적긴적었다. -_-;;
  • MoniWikiPlugins . . . . 1 match
         == 모인모인에서 내장 함수였던 것을 매크로로 분리 구현한 것 ==
  • MySQL/PasswordFunctionInJava . . . . 1 match
         // JDK 1.5 이상에서 동작. (String.format 함수 때문에)
  • NSISIde . . . . 1 match
          * Save/Load 와 관련한 메세지의 함수 호출 순서 (Function Call 따라가기)
  • NeoCoin/Server . . . . 1 match
         아래 쉘 함수를 .bash_profile 등에 등록하여 실행되도록 한다.
  • NumericalAnalysisClass/Exam2002_1 . . . . 1 match
         5. Lagrange, Hermite, spline 함수의 특징을 Smoothness 관점에서 비교 설명하시오.
  • NumericalAnalysisClass/Exam2002_2 . . . . 1 match
         1. 주어진 함수 f(x) = x^3 + x - 4 이 구간 [1,4] 에서 하나의 해를 갖을 때, 그 근사값이 10^-4 의 오차 한계에서 구하기 위해 이분법 (bisection method) 을 적용하였을 때 최대 반복횟수를 계산하시오.
  • NumericalAnalysisClass/Report2002_1 . . . . 1 match
         Cubic Spline 함수를 계산하기 위해서는 Tri-Diagonal Matrix 에 대한 해를 구할 수 있어야 한다. 다음과 같이 주어진 Tri-Diagonal Matrix 시스템의 해를 계산하는 프로그램을 작성하시오.
  • OurMajorLangIsCAndCPlusPlus/2005.12.22 . . . . 1 match
         - 함수 호출의 원리
  • OurMajorLangIsCAndCPlusPlus/2006.1.26 . . . . 1 match
         클래스 [OurMajorLangIsCAndCPlusPlus/Class]
  • OurMajorLangIsCAndCPlusPlus/2006.1.5 . . . . 1 match
         함수에 대하여... [OurMajorLangIsCAndCPlusPlus/Function]
  • OurMajorLangIsCAndCPlusPlus/setjmp.h . . . . 1 match
          함수 : void longjmp(jmp_buf, int) - 기능 : jmp_buf에 기록된 위치로 이동한다.
  • OurMajorLangIsCAndCPlusPlus/string.h . . . . 1 match
         == 함수 (Functions) ==
  • PNA2011/서지혜 . . . . 1 match
          * Erlang은 함수형 언어. 분산처리 능력이 뛰어나다. 리스트의 재귀처리가 용이하다
  • PairSynchronization . . . . 1 match
         상민이랑 ProjectPrometheus 를 하면서 CrcCard 세션을 했을때는 CrcCard 에서의 각 클래스들을 화이트보드에 붙였었죠. 그리고 화이트보드에 선을 그으면서 일종의 Collaboration Diagram 처럼 이용하기도 했었습니다. 서로 대화하기 편한 방법을 찾아내는 것이 좋으리라 생각.~ --["1002"]
  • ParametricPolymorphism . . . . 1 match
         SportCar, LuxuryCar는 Car를 상속받는 클래스 이므로 IS-A의 관계라고 할 수 있다.
  • PatternOrientedSoftwareArchitecture . . . . 1 match
          * 이 패턴은 : data source - filter - pipes - filter - data sink, 의 순서로 되어 있고, 각 필터에서는 데이터를 처리하는 함수가 있을 수 있다. 레이어 패턴과 비슷한 점도 보이지만, 이 패턴의 특징은 쉬운 재조합과 재사용성이다. 에러를 처리하는 관점과 시스템의 신뢰성을 따지면 레이어가 더 낮다.
  • Postech/QualityEntranceExam06 . . . . 1 match
          3. Machine Language Like 한 프로그램 만들기. 코드 주고. 스앞 함수 호출하는 부분 있고 파라미터 패싱을 설명해야함.
  • PrimaryArithmetic/Leonardong . . . . 1 match
         이렇게 놓고 보니 수식과 비교해 이름을 잘못 지은 부분이 눈에 보인다. 아무튼 전단계 캐리를 구하는 부분을 그냥 작성하느라 흐름을 타지 못했다. 잘 돌아가는 프로그램을 만들었지만, 머리 속에 함수 재귀 호출을 계속 떠올리고 있었다. 수식이란 메타포가 있었는데도 구현을 하는데 메타포를 코드와 연결시키는데 오래 걸렸다. 아니 메타포를 생각하고 구현한 것이 아니다. 중복을 없애다 보니 그제서야 수식이 눈에 들어왔다.
  • ProgrammingLanguageClass . . . . 1 match
         아쉬운 부분은 프로그램 언어론이란 과목임에도 불구하고, 설명의 비중은 많이 쓰이는 언어일수록 높았던 점입니다. 함수형언어(FunctionalLanguage)는 기말 고사 바로 전 시간에 한 시간만에 끝내려다가, 그나마 끝내지도 못하고 요약 부분만 훑었습니다. 그 밖의 종류에 대해서는 거의 절차적 언어, 특히 C계열 언어를 설명하다가 부연 설명으로 나오는 경우가 많았습니다. 논리형언어(LogicLanguage)에 대한 설명은 거의 못 봤습니다. 어차피 쓰지 않을 언어라고 생각해서일까요.--[Leonardong]
  • ProgrammingLanguageClass/2006/EndTermExamination . . . . 1 match
         a) 상기 소스에서 fun 함수의 파라메터 전달 방식이 Pass-By-Value, Pass-By-Name 의 경우로 나누어서 출력 결과값을 나타내라 (소스는 대충 비슷한거 같은데 확실하지 않음. -_-;; 기억에 의존하다 보니 ㅋㅋ)
  • ProgrammingLanguageClass/Report2002_2 . . . . 1 match
          * 컴파일러에서 포인터에 대한 보안성에 관한 평가
  • ProjectAR/Temp . . . . 1 match
          === 생각해 본것 (클래스 구조) ===
  • ProjectPrometheus/CookBook . . . . 1 match
         Python 에서의 string.urlencode 과 마찬가지로 GET,POST 로 넘기기 전 파라메터에 대해 URL Encoding 이 필요하다. URLEncoder 라는 클래스를 이용하면 된다.
  • ProjectPrometheus/EngineeringTask . . . . 1 match
         || HTML 문서 가져오는 클래스 (Spider) 작성 || ○ ||
  • ProjectPrometheus/Iteration1 . . . . 1 match
         || HTML 문서 가져오는 클래스 (Spider) 작성 || 1 || ○ (2시간) ||
  • ProjectPrometheus/Iteration9 . . . . 1 match
          * 도서관 UI 와 시스템 스타일이 바뀐점에 대한 대처.(GET/POST 변수들에 대해 분석. Extractor 클래스들 수정)
  • ProjectTriunity . . . . 1 match
         || Upload:ExternalSort_PM_2.zip || 신재동 || 다단계 합병 초기 런 분배시 피보나치 수 계산 함수 ||
  • ProjectVirush/Prototype . . . . 1 match
         바이러스는 증식 속도, 잠복기, 독성을 가진다. 이는 시간에 관한 함수(f(t))이다.
  • ProjectZephyrus/Server . . . . 1 match
         ||'''내용'''||'''관련클래스'''||'''담당'''||'''진행율'''||
  • ProjectZephyrus/ThreadForServer . . . . 1 match
         이 아주 간단하고 단순한 프로그램을 수행하기 위해서 아래의 두가지 라이브러리가 필요 하다. 다운 받아서 클래스 패스에 잡아 놓기 [[BR]]
  • PyGame . . . . 1 match
         pygame.Surface 를 상속받은 새 클래스를 만들 수가 없다. 이상하게도 다음 코드가 Attribute 에러가 난다. 적절히 제약부분에 대해서 생각을 해야 할듯.
  • PyIde/Scintilla . . . . 1 match
         Boa Constructor 나 Pythoncard, wxPython 의 samples 의 StyleEditor 등을 보면 STCStyleEditor 모듈이 있다. 이 모듈에서 initSTC 함수를 사용하면 된다.
  • PyOpenGL . . . . 1 match
         새 버전의 [PyOpenGL]의 경우 메소드 이름이 약간 바뀌었다. xxxFuncCallback 함수 대신 xxxFunc 식으로 쓰인다. Nehe 의 코드 대신 [PyOpenGL] 인스톨시 같이 인스톨되는 Nehe Demo 프로그램 코드를 이용하기를 권한다.
  • PyServlet . . . . 1 match
         servlet 클래스의 경우는 수정시 바로바로 적용이 되나, import 되는 모듈을 수정하는 경우 바로 적용이 되지 않는다.
  • REFACTORING . . . . 1 match
          * 함수를 추가할 때
  • RandomWalk/영동 . . . . 1 match
         === RandomWalk.cpp (Main함수) ===
  • RandomWalk/이진훈 . . . . 1 match
         int countz()//빈칸없나 체크하는 함수.
  • RandomWalk/창재 . . . . 1 match
         int def_empty() // 꽉 찼나 안찼나 확인하는 함수.
  • RandomWalk2/Vector로2차원동적배열만들기 . . . . 1 match
         위의 방법 외에도 클래스로 감싸주고, 내부적으로는 1차원 배열을 쓰는 방법이 있겠죠. row*width+col로 특정 원소를 레퍼런스할 수 있습니다.
  • ReleaseDebugBuildStartGo의관계 . . . . 1 match
          -복사생성자에서 멤버 간 대입(member-wise assignment)를 잘 하는가?
  • ReplaceTempWithQuery . . . . 1 match
         위의 예는 매우 극단적으로 보일지도 모른다. 하지만 위의 예를 매우 복잡한 시스템의 일부분이라 가정하고 생각해보길 바란다. '''임시변수'''를 사용하는 코드는 해당 블럭에서만 접근 가능하기 때문에, 길어지는 성향이 있다. 이러한 임시변수를 '''질의 메소드'''(query method)로 바꿈으로써 어느곳에서라도, 임시변수에서 사용될 정보를 얻을 수 있고, 클래스 코드는 더 깔끔해진다.
  • ReverseAndAdd/황재선 . . . . 1 match
          reverse 부분은 shell에서 약간의 테스트를 거쳤습니다. 그래서 따로 테스트 코드를 만들지 않았는데 그 결과 디자인이 나빠진 것 같습니다. 아직은 tdd에 익숙하지 않아서 모든 함수를 테스트 코드화하면서 보폭을 줄이는 훈련을 해야겠습니다. -- 재선
  • RoboCode . . . . 1 match
         각 로보코드 참가자는 자바 언어의 요소를 사용하여 자신의 로봇을 만들면서 자바가 갖고 있는 상속성, 다형성, 이벤트 처리 및 내부 클래스 다루는 방법을 배우게 됩니다
  • Ruby/2011년스터디/강성현 . . . . 1 match
          * 만들어진 json parser를 이용하여 각 api의 입/출력을 처리할 수 있는 함수 작성
  • RubyLanguage/Container . . . . 1 match
         모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다.
  • RubyLanguage/DataType . . . . 1 match
          * 루비에는 Boolean클래스가 존재하지 않는다. 또한 true와 1은 다르며, false와 0도 같지 않다.
  • RubyLanguage/InputOutput . . . . 1 match
          * IO클래스
  • RuminationOnC++ . . . . 1 match
         아마존의 서평이 상당히 좋은 편이다. 비록 몇명안되는 리뷰만 있지만... 책을 본 사람들의 평가의 극상의 수준이다. 초급 C++ 프로그래머가 보기엔 좀 무리가 있는 내용이지만 재미있게 남는 시간에 읽을 수 있다.. (대략 50쪽에 핸들 클래스를 사용하라는 내용이 나온다.)
  • RunTimeTypeInformation . . . . 1 match
         위에서 보듯이 클래스의 형을 비교하는 것이 가능하다.
  • STL/string . . . . 1 match
          * string 클래스라고 해서 공백을 무시할수 있는것은 아니다. 학교 교재에 보면 getline()과 get()이 나온다. string 변수로 입력을 받는다 해도 cin >>을 사용하면 공백을 입력 받을수 없다. 따라서 getline() 써줘야 한다.
  • SchemeLanguage . . . . 1 match
         MIT에서 가르치는 프로그래밍 언어로, 흔히 우리가 알고 있는 C/C++, Java 등과는 완전히 다른 개념의 함수형 언어이다.
  • Self-describingSequence/1002 . . . . 1 match
         binary search 로 바꾸고 나서도 역시 오래걸림. 다른 검색법에 대해서 생각하던 중, findGroupIdx 함수 호출을 할때를 생각.
  • SingletonPattern . . . . 1 match
         이전에 ProjectZephyrus 를 프로그래밍할때 느낀점이라면, 초반에 디자인을 할 때 일수록 Singleton 을 쓸 생각을 하지 않는것이 좋겠다는 점이다. 초반에 디자인을 할때엔 (특히 Conceptual Model 단계정도만 생각하고 프로그래밍에 들어가는 사람의 경우) 어떠한 클래스건 대부분이 인스턴스가 한개이다. -_- 그렇다고 이 모든 것들을 글로벌 객체로 만들어내는 것은 그리 좋지 않다. --["1002"]
  • Slurpys/문보창 . . . . 1 match
         힘들게 버그를 잡고 통과. 재귀함수 사용시 여러가지 통로(?)를 잘 관리해 줘야한다.
  • SmalltalkBestPracticePatterns/DispatchedInterpretation . . . . 1 match
         때때로, 그러나, 한 객체의 정보는 다른 객체의 행위에 영향을 미칠 것이다. 정보의 사용이 단순할 경우, 또는 제한된 정보에 기반해서 선택이 가능할 경우에는 인코딩된 객체에게 메시지를 보내는 것이 충분히 가능하다. 이와 같이, 부울린 값들은 두 클래스의 하나의 인스턴스로 표현되어진다는 사실은, True 그리고 False, 메시지 #ifTrue: ifFalse:. 뒤로 숨겨진다
  • SmithNumbers/이도현 . . . . 1 match
          /* 입력 받은 숫자를 문자열로 저장하기 위한 포인터 */
  • SnakeBite/창섭 . . . . 1 match
         DeleteMe) CRgn과 CRect에 있는 PtInRegion과 PtInRect함수로 영역 검사를 해보는 편이 편할듯 by 최봉환[[BR]]
  • SoftwareEngineeringClass . . . . 1 match
         하지만 역할별, 작업별로 만드는 계획서와 보고서에 쏟는 시간이 너무 많다는 생각은 저 뿐만이 아닐 것입니다. 심사시에는 계획서에서 언급하지 않은 활동을 실행했다고 딴지를 걸 정도로, 계획서대로 실행된 내용을 변경없이 실행하는 것이 프로젝트의 반복가능성을 평가하는 기준인것 같습니다. 설계와 구현 사이에서 계획대로 실행 안되는 부분을 극단적으로 느꼈는데, 예를 들어 클래스 다이어그램과 시퀀스 다이어그램이 [Refactoring]과 같은 코드 재구성 작업을 할 때마다 바뀌어야 했습니다. 다이어그램이 코드로 매칭되지 않기 때문에 코드를 바꿈은 물론 다이어그램을 바꾸는 이중의 수고를 겪어야 했습니다. :( --[Leonardong]
  • SpiralArray/영동 . . . . 1 match
          * 제대해서 처음으로 숙제를 제외하고 처음 짠 ToyProblem입니다. 1학년 때 프로그래밍잔치에서 못 짰던 걸 이제야 짰네요. 우선 소요시간으로 미루어 볼때 제대하고 나서 머리가 굳었다는 걸 느낄 수 있었고, 그만큼 처음부터 막 짜지 말고 설계 및 구상을 잘 해야겠다고 생각했습니다. 또한 객체지향으로 짠 것도 아니고 변수, 함수를 너무 지저분하게 쓴 거 같기도 하고... 반성할 점이 참 많았습니다. 그리고 일단 배열 크기도 미리 정했고 시작점도 0, 0으로 가정하고 해서 사용자의 잘 못된 입력에 대응하지 않은 점도 미비했네요.
  • StringOfCPlusPlus/세연 . . . . 1 match
         역시 포인터는 헷갈려, 분명 사소한데서 잘못되구 있는게 분명한데.......언넝 에러를 잡아야할텐에......
  • StudyingFundamentalsOfTcpIp . . . . 1 match
          * 일정 분량을 공부하고 멤버들끼리 질답을 갖는 시간을 정기적으로 갖을 것입니다.
  • SuperMarket . . . . 1 match
         1. 클래스를 이용 (좀 더 체계적으로)
  • TFP예제/WikiPageGather . . . . 1 match
          * Python 이라는 툴이 참 재미있는 녀석이라 생각한다. 방식이야 basic에서의 그것이겠지만, '인터프리터언어라는 것이 쉽고 편하다' 의 이유를 다시 생각하게 해준 계기가 되었다. 일반적으로 우리가 프로그래밍을 할 때는 (여기서는 C++이라 하자) Visual C++ 을 하나만 띄어놓고 프로그래밍 하는 경우가 별로 없다. 보통 product code 를 위한 하나, 해당 함수 기능의 부분구현 (임시코드 구현)을 위한 하나. 서버-클라이언트 프로그래밍인 경우에는 3개를 띄우는 경우도 다반사이다. Python 의 shell 은 임시코드를 구현하는데 매우 편리한 도구이다. (한편 이쯤되면 검문이 필요하다. VS 2-3개 띄우는 거랑 python IDLE을 2-3개 띄우는 거랑 다를바가 뭐냐.. --; 내가 말하고 싶은 것은 C++이나 PHP에 파이썬처럼 공통 인터프리터 쉘이 있었으면 하는 것. -_a 흐흐..) 암튼. 나는 모인모인소스를 보면서 제목 검색 관련 일부 코드를 짤라서 쉘에서 간단히 실행해보고 검토하고 실제 소스에 적용해볼 수 있었다.
  • TddRecursiveDescentParsing . . . . 1 match
         문제점 : 테스트 가능할 수 있는 아이디어가 나오기까지가 오래걸렸다. 테스트 가능한 방법으로 접근하고 나서부터의 코딩은 1-1.5시간정도밖에 안걸렸지만. 그리고 본래의 스펙에는 AST 에 대한 언급이 없었다. 해당 함수가 제대로 호출되었는지를 근거로 접근하는 것이 나았을지도.
  • TheWarOfGenesis2R/ToDo . . . . 1 match
          * (V) 게임루틴과 출력루틴의 클래스 구분
  • TheWarOfGenesis2R/일지 . . . . 1 match
          * 리팩토링의 위대함을 계속 느껴 버렸다. Extract Method는 기본이고, 상위 클래스로 올리기, 등등 이것저것 하니까 매우 간단해지는 것을 느꼈다.
  • TowerOfCubes/조현태 . . . . 1 match
          이번엔 전역변수 안썼으나.. 안의 구조체 전달을 포인터 전달로 변환하면 속도 향상할 수 있음 ^^;
  • UnitTest . . . . 1 match
         A: Socket 이나 Database를 이용하는 경우에는 문제가 되겠죠. 그럴때 MockObjects를 이용하는 방법이 있었던걸로 기억하는데, 아직 실제로 제가 해보지는 않아서요. 대강 개념을 보면 MockObjects는 일종의 가짜 객체로 실제 객체가 하는 일을 시뮬레이션 해주는 객체입니다. 미리 MockObjects 를 셋팅을 해두고 해당 함수결과의 리턴 요구시에는 예측할 수 있는 데이터를 리턴하게끔 하는 것이지요. 나중에 본 프로그램에서 MockObjects들을 토대로 실제의 객체를 만든다.. 식의 개념으로 기억하고 있긴 한데, 저의 경우는 공부만 하고 적용해본 적은 없습니다. --석천
  • UseSTL . . . . 1 match
          * 오늘 맘에 드는 함수가 있는 소스를 보고 적어줄려 했더니.. 같은 책을 보고 있었네.. ^^;;;;; --["경태"]
  • VisualAssist . . . . 1 match
         VS6 에서의 그 버그많은 Intelli Sense 기능을 많이! 보완해준다; VS6 에서 지원하지 않는 매크로 인라인 함수 등에 대해서도 Intelli Sense 기능을 지원. Header - Cpp 화일 이동을 단축키로 지원하는 등 편한 기능이 많다.
  • VisualStudio2005 . . . . 1 match
         C# 자동으로 클래스 다이어 그램 그려주네요. 테스트 케이스 작성은 아직 못 해봤음. -_-
  • VonNeumannAirport . . . . 1 match
          -> 이에 따라 Input 부분이 바뀌고, Input 부분이 클래스와 합쳐진 코드의 경우 더더욱 골치.
  • WikiProjectHistory . . . . 1 match
         || ["MFCStudy_2002_1"] || 창섭(["Wiz"]), 정훈, 재민 || 방학중 MFC 와 클래스의 개념을 익히며 간단한 결과물 작성 || 종료 ||
  • WorldCupNoise/권순의 . . . . 1 match
          * 재귀함수는 느려서 시간 초과되네요
  • XMLStudy_2002/Encoding . . . . 1 match
          *Unicode와 XML등과 같은 Markup Language 등에 대해 W3C와 Unicode.org 멤버들이 작성한 Technical Report : [http://www.w3.org/TR/1999/WD-unicode-xml-19990928/]
  • XMLStudy_2002/XML+CSS . . . . 1 match
         스타일은 한 번만 작성해도 같은 클래스에 속하는 XML문서들이 함께 사용할 수 있다.
  • XpWeek/20041224 . . . . 1 match
          사실 네트워크에 대한 MockObjects는 어렵지 않았던 것 같아. JUnit에서 제공하는 MockObject클래스를 소켓에 써먹는 방법에 집착한 나머지 포기하지 않았을까? 단순히 서버와 클라이언트 흉내만 내면 될텐데...
  • YetAnotherTextMenu . . . . 1 match
         차라리 "텍스트 메뉴" 자체를 Event Driven Programming 개념을 전달하기 위한 toy problem으로 쓰는 건 어떨까? 간단한 구조를 통해, 콜백 함수가 무엇인지 등을 배울 수 있을 것이다.
  • Yggdrasil/가속된씨플플/0장 . . . . 1 match
          * 함수: 자신의 이름을 가지며, 다른 곳에서 이를 호출하거나 실행시킬 수 있는 프로그램의 한 조각
  • ZIM/ConceptualModel . . . . 1 match
         컨셉(Concept)의 이름 바꾸기나 추가, 삭제는 아직 진행중입니다. 컨셉 사이의 관계와 속성 잡아서 컨셉 다이어그램(ConceptualDiagram) 그리기는 생략하고 클래스 다이어그램으로 직행하기로 하죠. 그 전에 ["ZIM/UIPrototype"], ["ZIM/RealUseCase"]를 작성해볼까요? -- ["데기"]
  • ZPBoard/AuthenticationBySession . . . . 1 match
         session_start(); // Session 을 사용하기 위해서는 반드시 맨 처음에 이 함수를 호출해주어야 한다.
  • ZPBoard/PHPStudy/MySQL . . . . 1 match
          * mysql 함수를 실행한다.
  • ZPBoard/PHPStudy/쿠키 . . . . 1 match
          * 제한시간 항목에는 time()이나 mktime()함수의 리턴값을 사용할 수도 있다.
  • [Lovely]boy^_^/Diary/7/8_14 . . . . 1 match
         중첩되어있다면 좀 귀찮아지거든요(2차원배열같은형태) copy 모듈의 deepcopy 함수를 쓰면 된다지요.
  • [Lovely]boy^_^/EnglishGrammer/Passive . . . . 1 match
          We use get mainly in informal spoken English. You can use be in all situations.(항상 be 쓸수있단다. 고로 귀찮은 get쓰지말자... 클래스에서 get 보는것도 지겨운데..--;)
  • [Lovely]boy^_^/ExtremeAlgorithmStudy/MathematicalFoundations . . . . 1 match
          * 집합, 함수, 그래프, 트리
  • [Lovely]boy^_^/영작교정 . . . . 1 match
          * 변수나 함수 이름 쓸때 대소소...대소소 이런식으로 쓰다보니 저런 에러가 났다.--;
  • eXtensibleMarkupLanguage . . . . 1 match
          * [http://www.joon.pe.kr/blog/250 php로 xml 생성 클래스(예제포함)]
  • erunc0/Mobile . . . . 1 match
          * gx library 에서 제공해주는 몇안되는 함수를 이용하여. pda 화면에 대한 pointer를 얻어와 삽질해서 뿌린다. dx 할때랑 똑같음.
  • java/reflection . . . . 1 match
          * 문자열을 출력하는 샘플 클래스.
  • k7y8j2 . . . . 1 match
         C++클래스 부분 마스터
  • lostship . . . . 1 match
          || ["Boost/SmartPointer"] || 스마트 포인터 쓰기 ||
  • matlab . . . . 1 match
          - 일단 classdef 로 클래스를 작성.
  • pragma . . . . 1 match
         C 와 C++ 을 구현한 각각의 컴파일러에는 포팅된 하드웨어나 OS 에 의존적인 몇몇가지들의 기능을 가지고 있다. 일례로 몇몇의 프로그램들은 메모리에 데이터가 어떠한 방식으로 자리잡을 것인지 에 관한 문제나 함수가 파라미터들을 조작하는 방법들에 대한 세밀한 조작이 요구된다. #pragma 지시어들은 C 와 C++ 언어 안에서 최소한의 호환성을 유지시키며 그러한 시스템 의존적인 명령어들을 언어의 기능으로서 포함시키는 일을 한다. Pragma 지시어들은 일반적으로 '''컴파일러들 마다 서로 다르다'''.
  • source . . . . 1 match
         [포인터 swap]
  • zennith/dummyfile . . . . 1 match
         12389523 바이트의 쓰레기 파일을 각각 생성하는데 처음에 짠 허접 버전과 두번째의 약간 개선 버전이 각각 0.991초와 0.37초를 기록했다. 두번째 것을 만들면서.. 함수화 같은 거도 좀 했으면 좋겠다는 생각도 무럭무럭 무럭 들었으나.. 그놈의 귀찮음이 뭔지 ; 아무튼 발전이 없는 나로군.
  • zennith/source . . . . 1 match
         이 컴비네이션 함수.. 제대로 푼건지 확신이 안가는군요. 6c3 같은거로 테스트 해보면 제대로 돌아가는 거 같은데요.
  • zozo . . . . 1 match
          중대컴공 98 이선호. 제로페이지랑 친한 네토리 학회 멤버.
  • ㄷㄷㄷ . . . . 1 match
         두 개의 서로 다른 함수를 사용해서 하도록 했지~
  • 가위바위보 . . . . 1 match
         렌덤 함수 이용을 가르치기 위한 숙제입니다
  • 강희경/메모장 . . . . 1 match
         y = 4 * (1 - x)라는 수식에서 x의 값이 0.3이었을 때와 0.3000000001이었을 때, 이 함수를 100번 반복했을 때 결과의 차이.
  • 객체지향용어한글화토론 . . . . 1 match
          * 예를 들어 외국인이 클래스를 처음 배울때 느끼는 public, private의 느낌과 우리가 그것을 처음 보았을때 느낌은 상당히 틀릴것이다.
  • 고한종/on-off를조절할수있는코드 . . . . 1 match
          //이 부분은 scanf_s("%c",&keyOnOff);로도 쓸 수 있지만 scanf_s와 scanf의 차이도 잘 모르고 scanf는 사실 매우 어려운 함수;
  • 고한종/업적/WinAPI로만든학과주점포스기 . . . . 1 match
         삼성 소프트웨어 멤버십을 노리면서 만든 거 였는데 미완성으로 끝. 폐기.
  • 고한종/팩토리얼 . . . . 1 match
         재귀함수를 쓰지 않고 팩토리알 쓰기. 저기서 변수를 더 줄일 수 있을것 같은데 하기 힘들다.
  • 구구단/Leonardong . . . . 1 match
          * Niner 클래스
  • 구구단/조재화 . . . . 1 match
          * cho 클래스
  • 권영기/채팅프로그램 . . . . 1 match
          * 서버의 경우 listen을 하기위하여 while문으로 무한 루프를 돌고 있으므로 조인이 없어도 스레드가 중간에 죽지않습니다. 그리고 main이 return을 하여 프로세스가 종료될 경우 지식스레드도 모두 종료되므로 main 함수 실행 도중에 종료해야하는 경우 이외에는 따로 처리를 하지 않아도됩니다. - [김희성]
  • 금고/김상섭 . . . . 1 match
         == 로그함수가 이상하당..@,.@ ==
  • 김준영 . . . . 1 match
          * 프로그래밍 공부. (당장 포인터부터 ㅜㅜ)
  • 김태진 . . . . 1 match
          * 11학번 첫번째 ZP정회원이자(5/18), 첫번째 OB멤버입니다.
  • 김희성/리눅스계정멀티채팅 . . . . 1 match
          //터미널 출력 위치 변경 함수, y값이 화면 길이보다 크면 화면 길이로 처리된다.(버그의 원인)
  • 김희성/리눅스계정멀티채팅2차 . . . . 1 match
          //터미널 출력 위치 변경 함수, y값이 화면 길이보다 크면 화면 길이로 처리된다.(버그의 원인)
  • 김희성/리눅스멀티채팅 . . . . 1 match
          //터미널 출력 위치 변경 함수, y값이 화면 길이보다 크면 화면 길이로 처리된다.(버그의 원인)
  • 논문번역/2012년스터디/김태진 . . . . 1 match
          x와 Ax간의 관련성은 한 벡터들의 집합에서 다른 집합으로 가는 기능이다. 이 개념은 함수에 대한 일반적인 개념을 한 실수에서 다른 실수로 변환하는 규칙으로 일반화할 수 있다.
  • 논문번역/2012년스터디/서민관 . . . . 1 match
         특징 벡터들의 연관성을 줄이고 클래스(...)의 분리성을 증가시키기 위해서 우리는 훈련과 인식 단계의 선형 판별 해석을 통합하였다.(cf. [6])
  • 다이얼로그박스의 엔터키 막기 . . . . 1 match
         1. Add Virtual Function 클릭해서 PretranslateMessage 함수 추가
  • 데블스캠프 . . . . 1 match
         왜 밤을 새면서 멤버를 뽑느냐라는 말은 해마다 들어온 이야기라 이젠 낯설지도
  • 데블스캠프2003/넷째날/Linux실습 . . . . 1 match
          * C 소스를 입력합니다. 단, C++ 스타일이 아닌 C 스타일로. 즉, stdio.h와 printf등을 사용하라는 뜻이죠. 주의할 점은, 여기서 주의할 점은 main() 함수의 리턴값은 void로 해주면 안 되고 int로 해주어야 합니다.(왜 그런지는 모르겠으나 컴파일 에러가 나더라고요.)
  • 데블스캠프2003/넷째날/후기 . . . . 1 match
          * 오늘 알게 된 OOP의 특징 중 각 클래스를 묶는 캡슐이라는 개념....이것을 보니 프로그램 짰을때, 더 쉽게 고칠 수 있을 것 같네요.. --[문원명]
  • 데블스캠프2003/셋째날/후기 . . . . 1 match
          * 아아..랜덤..랜덤..-_-;; 잘 쓰면 재미있는 함수군ㅡㅡ 재미있게 갖고 놀아야지.. 랜덤워크, 개짓끝에 성공>_<// ㅡ [이진훈]
  • 데블스캠프2004/세미나주제 . . . . 1 match
         [STL]을 할때 단순히 자료구조를 사용하는 방법을 같이 보는것도 중요하겠지만 내부구조 (예를 들어, vector는 동적 배열, list은 (doubly?) linked list..)와 같이 쓰이는 함수(sort나 또 뭐가있드라..그 섞는것..; ), 반복자(Iterator)에 대한 개념 등등도 같이 보고 더불어 VC++6에 내장된 STL이 ''표준 STL이 아니라는 것''도 같이 말씀해 주셨으면;; (SeeAlso [http://www.stlport.org/ STLPort]) - [임인택]
  • 데블스캠프2004준비 . . . . 1 match
          * 새로운 멤버의 의지검증
  • 데블스캠프2005/RUR-PLE/Harvest . . . . 1 match
         #오른쪽 함수
  • 데블스캠프2005/수요일후기 . . . . 1 match
         한유선 : 사실 매우 어려웠습니다. 처음에 너무 모르니까 답답했던게 아쉽네요 씨뿔뿔을 안해서 클래스가 뭔질 잘 몰랐는데 -_-;; 우리는 아직 객체고 뭐고 개념이 잘 안잡혀있답니다. 죄송 ㅠ_ㅠ
  • 데블스캠프2006/목요일후기 . . . . 1 match
         마지막 아날로그 시계는.. 사각형, 원, 선 그리기를 RAND 함수로 하겠다고 했다가 시간을 너무 소비해버려서 구현하지 못했지만
  • 데블스캠프2006/월요일/함수/문제풀이/성우용 . . . . 1 match
         1번 함수만들기
  • 데블스캠프2006/월요일/함수/문제풀이/이차형 . . . . 1 match
         함수만들기
  • 데블스캠프2006/월요일/함수/문제풀이/임다찬 . . . . 1 match
         함수만들기
  • 데블스캠프2006/전체일정 . . . . 1 match
         || 월 || [데블스캠프2006/월요일] || 문법 || 함수 || . || . || . ||
  • 데블스캠프2006/화요일 . . . . 1 match
         || 19:30 ~ 21:00 || 포인터 + 예제 || 아영 선호 ||
  • 데블스캠프2006/화요일/pointer/문제4/정승희 . . . . 1 match
         #include<cstring>//문자열을 비교하는 함수(strcmp)를 포함
  • 데블스캠프2006/화요일/tar/김준석 . . . . 1 match
          else tar(argv[i]); //tar로 넘겨준다 이름과 파일 주소제어포인터
  • 데블스캠프2009/목요일/연습문제/MFC/서민관 . . . . 1 match
         뭔가 찜찜한 계산기. 구조상 *와 / 연산이 불가능하다... 또한 추가 함수를 만들지 않아서 버튼 구조를 똑같은 것을 9번 반복
  • 데블스캠프2010/넷째날/후기 . . . . 1 match
          * 자바스크립트가 C언어와 많이 닮은것 같아서 매우 인상깊었습니다. 하지만 저의 C언어 실력이 미숙하여 하는데에 많은 어려움을 겪으면서 많은 생각을 하게 되었습니다. 일단 기본적인 C언어의 문법과 선언하는 함수 등을 자세히 공부하고, 자바스크립트에서의 C언어의 활용 방법을 좀더 연구해야겠다고 생각했습니다. 그리고 자바스크립트를 통해 비쥬얼 스튜디오보다 좀더 편리한 프로그래밍을 할수있어 더 좋은 내용의 프로그램을 만들수있다는 것에 대하여 생각해 보았습니다. 앞으로 좀더 열심히 공부해야겠다고 생각합니다. - [양아석]
  • 데블스캠프2010/다섯째날/ObjectCraft/미션1/서민관 . . . . 1 match
         == 메인함수 ==
  • 데블스캠프2010/다섯째날/ObjectCraft/미션2/서민관 . . . . 1 match
         == 메인함수 ==
  • 데블스캠프2010/다섯째날/ObjectCraft/미션3/김상호 . . . . 1 match
         == 메인함수 ==
  • 데블스캠프2010/셋째날/후기 . . . . 1 match
          * python 을 이름만 들어봤는데 이렇게 직접 해보니 정말 재미있었던 시간이었습니다. turtle함수를 이용한 그림그리기 프로그램을 해보니 파이썬에 대한 흥미가 들었습니다. 앞으로 파이썬에데해서 많은 관심을 가지게된 계기가 된것 같습니다. - [양아석]
  • 데블스캠프2010/첫째날/후기 . . . . 1 match
          * 리눅스 커널 링크드 리스트를 구조체를 이용해 설명해주셨었는데, 집중도가 떨어진 상태라 잘 듣지 못했습니다. 기억나는 것은 구조체를 넘기는 것 보단 구조체 포인터를 넘겨라 입니다. 이 말의 의미가 &Struct보단 &(pStruct)를 하라는 의미인가요? 많이 헷갈리더라구요 ㅜㅜ 템플릿에 대한 이야기도 잠깐 해주셨는데, 기억나는건 '템플릿은 좋다'입니다. 그런데 저는 '프로그래머가 자신의 편안을 추구하면 결국 유저에게 그 부담이 간다.'는 생각을 하고 있거든요. 설계가 아닌 문법사용에 있어서요. 앞으로 일반화 프로그래밍을 공부해볼 생각인데, 일단 먼저 오늘 생긴 의문을 풀어줄 부분을 공부해봐야겠네요 ㅋㅋ - [박성현]
  • 데블스캠프2011/둘째날/후기 . . . . 1 match
          * 씐나는 Cheat-Engine Tutorial이군요. Off-Line Game들 할때 이용했던 T-Search, Game-Hack, Cheat-O-Matic 과 함께 잘 사용해보았던 Cheat-Engine입니다. 튜토리얼이 있는지는 몰랐네요. 포인터를 이용한 메모리를 바꾸는 보안도 찾을수 있는 대단한 성능이 숨겨져있었는지 몰랐습니다. 감격 감격. 문명5할때 문명 5에서는 값을 *100 + 난수로 해놔서 찾기 어려웠는데 참. 이제 튜토리얼을 통해 어떤 숨겨진 값들도 다 찾을 수 있을것 같습니다. 그리고 보여주고 준비해왔던 얘제들을 통해 보안이 얼마나 중요한지 알게되었습니다. 보안에 대해 많은걸 생각하게 해주네요. 유익한시간이었습니다. 다음에 관련 책이 있다면 한번 읽어볼 생각이 드네요.
  • 데블스캠프2011/셋째날/String만들기 . . . . 1 match
         || 함수 || 예 ||
  • 데블스캠프2013/셋째날/머신러닝 . . . . 1 match
          //min이 어떤 클래스 인지.
  • 데블스캠프2013/셋째날/후기 . . . . 1 match
          * 음... 사실 정말 열심히 준비를 해서 최대한 차근차근 쉽게 설명을 해 보자고 생각을 했는데... 그래도 역시 처음 접하는 것이라 그런지 그렇게 간단하게 진행되지는 않은 것 같아서 마음에 아쉬움이 남습니다. 새내기들이 파일 포인터랑 파일 입출력을 조금이라도 알고 있었으면 훨씬 수월했을텐데 말이죠. 그래도 제가 할 수 있는 전력을 다 했다고 생각하고, 앞으로 똑같은 주제로 세미나를 한다고 해도 더 낫게는 못 할 겁니다. 따라서 앞으로 같은 주제로 세미나를 할 일은 아마 없지 않을까 싶습니다. 부탁이라도 들어오지 않는 이상. 이것 때문에 마음 걱정이 커서 밥을 먹어도 먹는 느낌도 없었는데, 그래도 스스로 만족스러울 만큼은 한 것 같아서 속이 후련하고 또 조금은 아쉽기도 합니다. - [서민관]
  • 데블스캠프계획백업 . . . . 1 match
          * C++ 클래스 부분은 어떨까요? - 상협
  • 독서는나의운명 . . . . 1 match
          * 내가 추천하는 책은 - [자유로부터의도피], [이기적인유전자] 이 두개는 토론하기에 좋을 만한 책(내가 강추 하는 책..), [채근담] 도 좋음.. 만약 이걸로 주제를 선정한다면 나도 다시 읽을 생각..., 태백산맥은 양이 너무 많아서 너무 빡신데 -_-. 토론 하는 시간은 정모 끝나고 나서가 좋을듯.. 만약 술자리가 있다면 독서 멤버들끼리 따로 모여서 얘기해도 될듯.. - 상협
  • 디자인패턴 . . . . 1 match
         그리고 디자인패턴이 하나의 설계언어가 되지요. '이클래스를 어떻게 연결하고 이 부분은 어떻게 구성하고...' 를 '~패턴으로 구현하고' 라는 한마디로 줄일 수도 있죠. (단, 이정도가 진행되려면 거의 PM쯤이 아닐까 하는..)
  • 랜웍/이진훈 . . . . 1 match
         int countz()//빈칸없나 체크하는 함수.
  • 레밍즈프로젝트/그리기DC . . . . 1 match
         [레밍즈프로젝트]에서 사용하게 될 그리기 클래스.
  • 레밍즈프로젝트/이승한 . . . . 1 match
         메모리 관련 버그가 아니라. 메모리 확보와 해제를 위한 CPU 타임이었음. 보통의 맵이 1000*150 정도의 크기를 가질 텐데 그것을 죄다 인터페이스화 된 클래스로 생성을 중간에 메모리 소모가 심했다. CDwordArray, CByteArray두개로 필요 데이터를 나누고 좀더 최적화 시켜서 해결을 해 보았다. 메모리 확보와 해제에 필요한 시간은 거의 잡았지만 실제로 출력 할 때 어떤 어려움이 나타 날지는 모르겠다.
  • 만년달력/강희경,Leonardong . . . . 1 match
         int deter_date(int year, int month )//요일을 정하는 함수(0은 일요일, 6은 토요일)
  • 만세삼창VS디아더스1차전 . . . . 1 match
          dangling 포인터 아니냐;
  • 몬테카를로법 . . . . 1 match
         몬테카를로법을 통한 실험을 설계할 때는, 입력값의 확률분포와 실험의 수학적 모델링이 정확하지 않으면 몬테 카를로 방법은 무의미하다는 점에 주의하여야 하며, 난수의 분포가 분석에 큰 영향을 미치므로 필요한 난수의 범위와 분포에 따른 올바른 난수 생성 함수에도 주의를 기울여야 합니다.
  • 문자반대출력/남상협 . . . . 1 match
          * 아직도 파이썬 함수 좀 쓸라면 찾아 봐야한다. 이놈의 나쁜 기억력.. -_-
  • 문자반대출력/임인택2 . . . . 1 match
         아직 J 에서 함수부분까지 못봤다. 문제의 조건을 전부 만족하지는 못함. built-in 으로 제공되는 녀석을 사용해서 내가 짠거라고 하기에는 좀..--;
  • 문자반대출력/최경현 . . . . 1 match
         [문보창]선배님의 process_wchar() 함수를 빌려다 썼다.
  • 문제풀이/1회 . . . . 1 match
          이런 경우를 개선하기 위해서 map 함수가 있는것입니다. 이를 Haskell에서 차용해와 문법에 내장시키고 있는 것이 List Comprehension 이고 차후 [http://www.python.org/peps/pep-0289.html Genrator Expression]으로 확장될 예정입니다. 그리고 print 와 ,혼용은 그리 추천하지 않습니다. print를 여러번 호출하는것과 동일한 효과라서, 좋은 컴퓨터에서도 눈에 뜨일만큼 처리 속도가 늦습니다. --NeoCoin
  • 반복문자열 . . . . 1 match
          * 함수를 만든다.
  • 반복문자열/이정화 . . . . 1 match
         [반복문자열/허아영]에 있는 내용을 읽어보길 권합니다. 함수가 무엇일까 생각해볼 수 있을 것입니다. -- [Leonardong]
  • 빵페이지/구구단 . . . . 1 match
          재귀함수인가? 한번 사용해 봤습니다 ㅎㅎ
  • 삼총사CppStudy/20030731 . . . . 1 match
          * 기본적인 클래스의 사용방법
  • 삼총사CppStudy/숙제2/곽세환 . . . . 1 match
          진짜 잘하네요.. ^_^ 단한개를 지적하자면 스칼라값을 곱할때 v3 = 5 * v1; 이 안된다는것 정도겠네요... 이런건 friend함수를 한개정도 더 만들어주면 됩니다.
  • 새싹-날다람쥐 6월 10일 . . . . 1 match
         이 free는 가장 하위 포인터에만 사용이 가능하다. 따라서 array를 모두 free시키려면 for문을 돌려서 free(array[i])와 같이 모두 없애준 후에 free(array);를 해야 한다.
  • 새싹교실/2011/무전취식/레벨2 . . . . 1 match
          * printf()와 scanf()함수의 쓰임에 대해 말해주었습니다. %c %d %l %f %%등등.
  • 새싹교실/2011/씨언어발전/2회차 . . . . 1 match
         간단하게 bongbong 커리큘럼에 있는 예제를 이용하며 기본 입출력함수의 사용법에대해 수업했습니다.
  • 새싹교실/2011/씨언어발전/5회차 . . . . 1 match
         그리고 array를 이용하여 학생들 시험점수의 총합과, 평균, 모든학생의 총합과, 총평균을 구하는 코딩을 해보았다. 또한, 소수(prime number)를 구하는 함수를 배웠다.
  • 새싹교실/2012/사과나무 . . . . 1 match
         키워드라던가, 변수, 변수형 이라던가, 입출력 함수가 왜 있는가 같은 얘기를 했고
  • 새싹교실/2012/설명회 . . . . 1 match
          * 스크립트 언어도 괜찮지만 함수형 언어가 프로그래머적 기반을 다지는데 더 좋을지도.. 내가얼랭하고싶어서그런건아니고 - [서지혜]
  • 새싹교실/2012/아우토반/앞반/4.12 . . . . 1 match
          * 난수 생성 함수 rand, srand에 대한 간단한 고찰
  • 새싹교실/2012/아우토반/앞반/5.17 . . . . 1 match
         1. 문자열을 인자로 받아 문자열을 거꾸로 저장하는 함수
  • 새싹교실/2012/앞부분만본반 . . . . 1 match
         5. printf 함수의 기본적인 이해
  • 새싹교실/2012/열반 . . . . 1 match
          * 함수의 사용법과 if,else if, else문의 차이를 배웠습니다. [권우성]
  • 새싹교실/2013/라이히스아우토반/6회차 . . . . 1 match
         어질어질 다음 시간에 포인터는 어떨까..걱정된당
  • 새싹교실/2013/양반/3회차 . . . . 1 match
         함수호출
  • 새싹교실/2013/양반/5회차 . . . . 1 match
         함수를 배워서 기분이 좋다.
  • 새싹교실/2013/책상운반 . . . . 1 match
          * 왜 함수들의 마지막은 return 0;로 끝나는 지, 또 어떻게 쓰는지
  • 세미나/2004 . . . . 1 match
         || 3 || 민수&진영 || 클래스 ||. ||
  • 송치완 . . . . 1 match
          * ~~ProjectD의 멤버~~ 현재 탈주상태
  • . . . . 1 match
         기본 함수들을 설명하기 위한 예제니까요. :)
  • 수학의정석/집합의연산/조현태 . . . . 1 match
          또한 오버헤드를 줄인다는 명목하에 함수로 나누지도 않았따. (귀차니즘.ㅎ)
  • 숫자야구/ 변준원 . . . . 1 match
         #include <iostream> // 랜덤함수는 iostream에 포함되어 있습니다.
  • 쉽게Rpg게임만들기 . . . . 1 match
          * 쉽게 RPG 게임 만들기 라고 해서 RPG 쯔꾸르 깔고 사용하는 법만 간단히 설명하는 건가 했는데 Ruby 얘기도 나오고 해시 얘기도 나오고 슈퍼 클래스 얘기도 나와서 놀람… - [김수경]
  • 스터디제안 . . . . 1 match
         스터디를 하기 위해 또 다른 조직을 만들기가 부담이 된다면 이런 곳을 통해 인원을 모을 수 있겠습니다. 스터디하는 데에까지 꼭 멤버쉽 커뮤니티가 필요한 것은 아니겠죠.
  • 시간맞추기/김태훈zyint . . . . 1 match
         kbhit이라든지 time 함수들은 써본적이 없어서-_- 네이버 검색해서 알아냈다.
  • 실시간멀티플레이어게임프로젝트 . . . . 1 match
         파이썬의 기초 문법만 알면 강의에 참여할 수 있을 겁니다. 제가 말하는 기초란, if문, for문, 기초 데이타형(리스트, 터플, 사전, 문자열, 정수 등), 함수 정도에 대한 지식입니다.
  • 안혁준/class.js . . . . 1 match
         Javascript에서 클래스를 묘사하기 위한 방안.
  • 양아석 . . . . 1 match
         turn_off()함수를 만들어냄
  • 양쪽의 클래스를 참조 필요시 . . . . 1 match
         1. Set 함수를 만들어서 pWnd Setting
  • 여사모/과제/패턴인식 . . . . 1 match
         사용자로부터 하나의 문자열을 입력받아 기존 문자열에 입력받은 문자열이 있는지 여부를 알려주는 함수를 만들어 보세요.
  • 웹에요청할때Agent바꾸는방법 . . . . 1 match
         ## @brief 사이트 검색 결과 중 각 정의 결과 를 얻어 오는 클래스
  • 위키설명회2005/PPT준비 . . . . 1 match
         용도 : 자산관리, 프로젝트 멤버 주소록, *공유팁, 프로젝트 세팅방법
  • 이승한/mysql . . . . 1 match
          * PHP 에서 지원하는 MySql API 함수를 사용
  • 이승한/임시 . . . . 1 match
          * CS + C : 클래스
  • 자료병합하기/임인택 . . . . 1 match
         === haskell built-in 함수와 lambda function 이용 ===
  • 잔디밭/권순의 . . . . 1 match
          * 더블 포인터 안 쓰고 하려고 했는데 머리가 딸려서 -_-;;;;
  • 장용운/템플릿 . . . . 1 match
         템플릿 함수를 선언할 때, 선언부와 정의부를 분리하면 에러가 나는데 왜 그런지 모르겠다.
  • 정모/2002.9.26 . . . . 1 match
         ["ProjectPrometheus"] 팀의 경우는 현재 도서관 UI 가 바뀌는 통에 열심히 기존 코드 수정중이라고 함. 그대신 모듈화가 되어있어서 소스의 일부 클래스들만 수정하면 된다고 한다.
  • 정모/2003.8.26 . . . . 1 match
          * [JavaStudy2003] => 진행중, 멤버가 많이 빠짐.
  • 정모/2004.04.27 . . . . 1 match
          * 그날은 단순히 위키설명회와 멤버 영입인가요. 그 이후 무얼할 것인지 뚜렷한 계획을 세우지 않은 것 같습니다. -- [황재선]
  • 정모/2004.10.5 . . . . 1 match
          * 현재 클래스. static. 상속 배우는 차례
  • 정모/2011.4.4/CodeRace/강소현 . . . . 1 match
          * 음...저는 메인 함수를 사랑하나봅니다/ㅁ/ - [강소현]
  • 정모/2012.12.10 . . . . 1 match
          * 아니 그냥 C++ 말고 C요. 포인터 이후부터
  • 정모/2012.3.19 . . . . 1 match
          * 함수형언어 스터디
  • 정모/2012.4.9 . . . . 1 match
          * 대체로 진도가 제어문 끝나고 포인터 진행 중
  • 정모/2012.5.14 . . . . 1 match
          * 함수형 언어 스터디 제안
  • 정모/2012.5.7 . . . . 1 match
          * 함수형 언어 스터디 제안
  • 정모/2012.7.18 . . . . 1 match
          * 수요일 : callback 함수의 개념과 Javascript의 Event Handler 사용. 표준이 제정되지 않은 상황에서 Cross Browsing은 힘들다.
  • 정모/2013.4.29 . . . . 1 match
          * Friendship의 경우에는, 삼성소프트웨어멤버십 내에서 동아리 성과 공유회 등에 참여하게 됩니다.
  • 정수민 . . . . 1 match
          리팩토링이란 말이 있길래 코드를 한 번 봤어요. 배열 리팩토링이란 어느 부분을 말하고 있는지 잘 모르겠지만, 이전에 더 쉬운 리팩토링부터 해나가야 하지 않을까 싶어요. 이를테면 randem_x, randem_y같은 함수는 무슨 일을 하는가요? 하는 일이 너무 많지 않은지 의심해보세요. 코드가 중복되는 부분을 줄여나갈 수도 있겠죠. --[Leonardong]
  • 정의정 . . . . 1 match
          * 삼성전자소프트웨어멤버십 21-2기 활동
  • 제12회 한국자바개발자 컨퍼런스 후기/유상민의후기 . . . . 1 match
          * 집에 돌아와 stan4j 돌려보고 있는데 정말 최고다. 당장 13개의 순환 의존성에 문제가 있는 지점을 찾아준다. Java 언어가 매크로가 없고 매타 프로그래밍 요소가 적다는 언어의 특성으로 이런 멋진 도구가 만들어 진다는건 정말 좋다. 특히 손영수씨가 500개 클래스 안쪽에서는 무료라고 했는데, 이런 대단한 도구가 시간 제약이 아니라 규모 제약으로 무료라니 정말 놀랍다.
  • 조금더빠른형변환사용 . . . . 1 match
         // C언어 함수
  • 조영준 . . . . 1 match
          * 동네팀 멤버
  • 조재화 . . . . 1 match
          * www.msdn.com 라이브러리와 함수... 등등의정보를 알 수 있다.
  • 졸업논문/결론 . . . . 1 match
         RoR와 django 같은 경량 프로그래밍 기법이 힘을 얻는 또 다은 이유는, 강력한 표현력을 가진 주언어를 사용할 수 있기 때문이다. Ruby와 python은 스크립트 언어의 성격을 가지고 있으며, 객체 지향 개념과 함수형 프로그래밍 언어의 패러다임을 포함한다. 비록 느려서 시스템 프로그래밍에 사용하기에는 적당하지 않지만, 동적으로 빠르게 변하는 웹 환경에서는 ruby와 python같은 언어가 변화를 손쉽게 따라갈 수 있어 적당하다.
  • 중위수구하기/문보창 . . . . 1 match
          * 파일이름과 같은 클래스에 메인메소드만 있으뎐 됩니다.
  • 중위수구하기/조현태 . . . . 1 match
         그래서 함수로 빼내버렸다. 에잇.. 뭐 될데로 되라지~~ 휘적휘적 귀찮다구..ㅎㅎ
  • 지금그때/OpeningQuestion . . . . 1 match
         만약 관심이 가는 대상이 있다면 가급적 교양보다 (다른과) 전공수업을 들을 것을 권합니다. 학생들의 분위기, 교수의 태도, 수업의 진지함 등 모두가 차이가 큽니다. 의외로 따라가기가 그렇게 어렵지 않은 경우가 많습니다(오히려 클래스 탑을 하는 경우도 많습니다). 스스로 따라갈 수 있을지 의문이 들면, 해당 수업의 지난 학기 교과서를 구해서 읽어보세요. 감이 올겁니다.
  • 지금그때2004/회고 . . . . 1 match
          * 'COW', 'JStorm', 'Netory' 에 대한 홍보는 전혀 이루어지지 않았습니다. 행사 당일날 JStorm 이나 Netory 소속 멤버들에게 해당 모임이 있는지에 대해 물어봤을 때 아시는 분들이 없었습니다. (패널을 맡으신 분들을 제외하고요.)
  • 지도분류 . . . . 1 match
         ||["Scheme"]|| MIT에서 가르치는, 함수형 프로그래밍 언어이다 ||
  • 지속적인에너지패턴 . . . . 1 match
         '''스터디 그룹을 시작하는 것은 꽤 쉽다. 그러나, 그것을 유지하고, 멤버들이 활발하게 하고, 대화가 통찰력이 있고, 그룹이 오래 지속되게 하는것은 전혀 다른 문제이다. '''
  • 창섭/삽질 . . . . 1 match
          * 이상하게 함수가 작동을 안하거든 기본적으로 parameter 갯수와 reference 여부를 확인하자.
  • 최대공약수 . . . . 1 match
          C언어시간에 배웠는데, 이 문제에서는 아마 값을 넘기는 함수를 만들어서 사용하라는 것인듯 -- 아영
  • 최대공약수/김태훈zyint . . . . 1 match
         아영이꺼 보니 while문하구 함수쓰는거랑 따로따로하는 거였다..;
  • 최소정수의합 . . . . 1 match
          - 괜찮습니다. 사용하는 언어에서 만족될 함수 등등..을 써서 알아서 프로그래밍 하시면 됩니다. 하지만 처리조건을 만족할 수 있는 언어는 그렇게 프로그래밍 해주시길 바랍니다.
  • 최소정수의합/임인택2 . . . . 1 match
         에서 rnd의 타입이 Integer로 되었는데 Integer는 다른 값으로 나눠지지 않았다(내가 방법을 모르고 있을수도 있겠지만). haskell wiki를 뒤져 toRational 이라는 함수를 찾았지만 출력되는 모양이 영 마음에 들지 않는다.
  • 캠이랑놀자/051228 . . . . 1 match
         함수
  • 코드레이스출동 . . . . 1 match
         다음주 월요일에도 '팀1'은 연습을 하려 합니다. 중요 멤버 상규가 수요일이 안되서 월요일 1번 더한다는... 결과적으로는 좋지요. ^^ 여튼 시간 되시는 팀은 위에 공지를 참고 하여 오세요. 이때는 다음주 수요일 보다 간단하게 해서 2~3시간 정도 연습할 예정입니다. 우리 모두 열심히 훈련!! 빰빠빠라빠~ (효과음) --재동
  • 콤비반장의메모 . . . . 1 match
          ''사용자가 한번 플레이 했다는 걸 미디어에 직접 기록하는 방법으로는 디지털 워터마킹이 있습니다. 이 방법은 네트워킹 없이도 문제를 해결할 수 있는 방법입니다만 전문적 지식이 필요합니다. 네트워크로 확인하는 가장 쉬운 방법은 클라이언트는 재생시 마다 서버에서 인증을 받고, 서버측에서는 미디어의 아이디를 확인하고 재생횟수를 저장하는 방법이 아닐까 싶습니다. 미디어의 아이디 생성은 MD5 같은 해쉬함수 정도면 충분 할것 같습니다. --["데기"]''
  • 큐와 스택/문원명 . . . . 1 match
          // 이코드 때문입니다. 배열상의 모든 char 포인터가 결국 같은 곳을 가리키게 됩니다.
  • 큰수찾아저장하기/조현태 . . . . 1 match
         //여전히 소스는 엉망~ 아에 함수도 없네..ㅎㅎ
  • 타도코코아CppStudy/0804 . . . . 1 match
         최소 한개. 무조건 클래스를 이용하세요. 또한 될수 있으면 객체지향적으로.
  • 토이/삼각형만들기/김남훈 . . . . 1 match
         첫번째와 두번째는 너무 쉽다. 버퍼만 만들면 거기에 별표만 채우면 되니까. 오히려 makeBuffer 함수가 신경써야 할 부분. C 에서는 문자열의 끝을 신경써줘야 하니까.
  • 파스칼삼각형/sksmsvlxk . . . . 1 match
          * 내가 사용할 수 있는 함수가 존재하는 지 알아야 한다.
  • 파스칼삼각형/김남훈 . . . . 1 match
         문제는 내가 scheme 시스템에서 stdin stdout 을 어떻게 다루는지 몰라서 그냥 함수만 만들었다는 점.
  • 파스칼삼각형/김준석 . . . . 1 match
         아영이 누나 소스를 보았다. 아.. 재귀함수 + 하키스틱 공식으로 짤수있는거구나.. Ver 1, Ver 2, Ver 3의 변천사..
  • 파스칼삼각형/김태훈zyint . . . . 1 match
          함수가 멋지게 안나오는.. 이런 훌륭한녀석~!!
  • 프로그래밍언어와학습 . . . . 1 match
          * 학교에서 C++ 배운다고 하드웨어 건드리나. -_-; (전전공이라면 몰라도..) 컴퓨터공학과의 경우 학교에서 C++ 배워도 어셈블러 레벨까지 다루는 사람이 별로 없다고 할때, C++ 을 배웠다고 시스템레벨 까지의 깊은 이해가 필요없었다는 점인데.. 글을 읽으면, 마치 '교육용 언어로 C, C++ 을 배웠다면 시스템 레벨까지 이해할 것' 처럼 쓴 것 같다고 생각. (C, C++ 포인터를 레퍼런스 이상의 개념으로 쓴적이 있었나.. --a) 차라리 '우리는 전전공 출신에 하드웨어제어 해본 사람 뽑습니다' 라고 할것이지..쩝. Domain-Specific 한 부분을 생각치 않고서는 시스템 프로그래머에게서는 늘 자바와 Script Language 는 '군인을 나약하게 만드는 무기' 일 수밖에 없으니까.
  • 프로그래밍잔치/첫째날후기 . . . . 1 match
         사람들은 서로가 고른 언어로 만든 Hello World, 구구단 을 시연하면서 각자의 개발환경, 프로그래밍 방법 등을 보여주었다. 그리고 JuNe 은 중간에 Smalltalk (Squeak)의 OOP 적인 특성, Scheme, Haskell 의 함수형 언어 페러다임에 대해 보충 설명을 했다.
  • 피보나치 . . . . 1 match
          기본적인 함수의 제작은 재귀호출로 만들어야 하나, 다른 방법을 사용해도 됩니다.
  • 피보나치/고준영 . . . . 1 match
         물론 함수의 인수값을 2,3개씩해서 서버에 부담이 덜가는 방법이 있겠지만.. 난 이방법이 좋다.. --;;; 쩝.
  • 피보나치/변형진 . . . . 1 match
         피보나치를 한 줄기의 재귀 함수로 구현했다.
  • 피보나치/조현태 . . . . 1 match
          //메인함수- 값을 입력받고 출력하는 역활을 합니다.
  • 한자공 . . . . 1 match
         == 멤버 ==
  • 허아영 . . . . 1 match
         [http://blog.naver.com/ourilove.do?Redirect=Log&logNo=100003444965 포인터공부]
  • 현종이 . . . . 1 match
         class SungJuk //클래스를 선언합니다.
Found 1039 matching pages out of 7540 total pages (5000 pages are searched)

You can also click here to search title.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
Processing time 0.8446 sec